Rimuovere l'Attributo definito `onload` dal `<body>`

0

Domanda

Ho lavorato su questo per un paio di ore e sono al punto in cui mi sento come potrebbe essere il tentativo di realizzare qualcosa di impraticabile. Qualche idea o qualche consiglio è sicuramente apprezzato!

Il caso d'uso sono destinati richiede di interrompere il DOM del browser di analisi prima che abbia la possibilità di attirare l' <body> elemento. Per fare questo, ho usato questa one-liner come il primo script chiamato nel mio <head> elemento:

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

Questo previene con successo il browser di chiamare qualsiasi script successivi, e il <body> elemento rimane un rendering. Tuttavia, se il tag include un onload l'attributo <body> elemento, la funzione o il codice è ancora chiamato dal browser.

Come il contesto che intercetta DOM analisi è in <head>Non posso utilizzare document.body.removeEventListener() per eliminare il listener di eventi, perché il body elemento non esiste ancora. Impostazione window.onload per null non ha alcun effetto, e non tentando di intercettare l'impostazione di window.onload utilizzando Object.defineProperty(window, 'onload', {...}). In ogni caso, l' onload funzione o dichiarazioni ancora chiamato.

Per anticipare la domanda del perché non posso evitare di usare <body onload="...">il caso d'uso è per strumenti per sviluppatori, quindi sto cercando di creare contingenza per determinate condizioni di assoluta. Se non può essere fatto, non è killer per il mio progetto, ma mi piacerebbe certamente sapere perché non può essere fatto.

Grazie in anticipo!

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

Migliore risposta

2

È possibile utilizzare il Documento readystate al interactive stato, e sovrascrivere il onload attributo.

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

(Aggiunto il tuo codice il tuo commento per completezza.)

2021-11-21 15:08:35

In altre lingue

Questa pagina è in altre lingue

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