Supprimer l'Attribut défini par l' `onload` à partir de `<body>`

0

La question

J'ai travaillé sur cette question depuis quelques heures et je suis au point où je sens que je pourrais être en train d'essayer d'accomplir quelque chose d'irréalisable. Des conseils ou de l'insight est certainement apprécié!

Le cas d'utilisation je suis ciblage nécessite d'interrompre le navigateur du DOM de l'analyse avant qu'il ait une chance de tirer le <body> de l'élément. Pour ce faire, j'ai utilisé ce one-liner que le premier script appelé dans mon <head> élément:

document.replaceChild(document.createElement('html'), document.children[0]);

Cela empêche le navigateur de l'appel à tout les scripts, et le <body> élément reste non-rendus. Toutefois, si le balisage comprend un onload l'attribut de la <body> élément, la fonction ou le code est encore appelé par le navigateur.

Comme le contexte qui intercepte DOM l'analyse est en <head>Je ne peux pas l'utiliser document.body.removeEventListener() à la chute de l'écouteur d'événement, parce que le body l'élément n'existe pas encore. Réglage window.onload pour null n'a pas d'effet, et ne pas essayer d'intercepter le réglage de window.onload à l'aide de Object.defineProperty(window, 'onload', {...}). Dans chaque cas, l' onload fonction ou déclarations encore appelée.

Pour préempter l'évidente question de savoir pourquoi je ne peux pas tout simplement éviter d'utiliser <body onload="...">le cas d'utilisation pour les outils de développement, de sorte que je suis en train de créer de contingence pour certains absolue conditions. Si elle ne peut pas être fait, il n'est pas tueur pour mon projet, mais je voudrais bien savoir pourquoi il ne peut pas être fait.

Merci à l'avance!

events html javascript
2021-11-21 14:39:38
1

La meilleure réponse

2

Vous pouvez utiliser le Document readystate à l' interactive de l'état, et écraser l' onload attribut.

document.onreadystatechange = () => {
   if (document.readyState === 'interactive') 
      window.onload = null;
}

(Ajouté votre code de votre commentaire pour l'exhaustivité.)

2021-11-21 15:08:35

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................