Odebrat Atribut definované `onload` z `<body>`

0

Otázka

Pracoval jsem na tom několik hodin a jsem v bodě, kde se cítím, jako bych mohl být se snaží dosáhnout něčeho nepoužitelný. Nějakou radu nebo pohled, který je určitě ocení!

Použití případ, že jsem cílení vyžaduje přerušení prohlížeče DOM parsování před tím, než má šanci čerpat <body> prvek. K dosažení tohoto cíle, jsem použít tento one-liner jako první skript s názvem v mé <head> prvek:

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

Úspěšně zabraňuje prohlížeče z jakékoli následné volání skriptů, a <body> prvek zůstává un-vykreslen. Nicméně, pokud označení obsahuje onload atribut na <body> prvek, který funkci nebo kód je stále nazývá prohlížeč.

Jako kontextu, který zachycuje DOM parsování je v <head>Nemůžu použít document.body.removeEventListener() k poklesu posluchače událostí, protože body prvek ještě neexistuje. Nastavení window.onload k null nemá žádný vliv, a ani se snaží zachytit nastavení window.onload pomocí Object.defineProperty(window, 'onload', {...}). V každém případě, onload funkce, nebo prohlášení ještě zavolají.

Předejít zřejmá otázka, proč jsem prostě nemůže vyhnout použití <body onload="...">použití případ je pro vývojářské nástroje, takže se snažím vytvořit záložní pro určité absolutní podmínky. Pokud to není možné, to není vrah, aby můj projekt, ale já bych rád věděl, proč to nemůže být provedeno.

Díky předem!

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

Nejlepší odpověď

2

Můžete použít Dokument readystate na interactive státu, a přepsat onload atribut.

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

(Přidal svůj kód z váš komentář, pro úplnost.)

2021-11-21 15:08:35

V jiných jazycích

Tato stránka je v jiných jazycích

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