Elimina Atribut definit `onload "de la" <body>`

0

Problema

Am fost de lucru pe acest lucru pentru câteva ore și sunt în punctul în care simt că ar putea fi încercarea de a realiza ceva nefunctional. Orice sfat sau insight este cu siguranta apreciat!

În caz de utilizare sunt de direcționare necesită întreruperea browser-e DOM parsarea înainte de a avea posibilitatea de a trage <body> element. Pentru a realiza acest lucru, am folosit-o linie ca primul script numit în <head> element:

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

Acest lucru previne cu succes browser-ul de asteptare ulterioare script-uri, și <body> element rămâne ne-randat. Cu toate acestea, dacă include un marcaj onload atribut pe <body> element, care funcția sau codul este încă numit de către browser.

Ca și contextul în care se interceptează DOM parsarea este în <head>Nu pot folosi document.body.removeEventListener() să renunțe la eveniment ascultător, pentru că body elementul nu exista încă. Setarea window.onload pentru a null nu are nici un efect, și nici nu încearcă să intercepteze setarea de window.onload folosind Object.defineProperty(window, 'onload', {...}). În fiecare caz, onload funcția sau declarații obține încă numit.

Pentru a preîntâmpina evident întrebarea de ce nu pot evita folosind <body onload="...">, în caz de utilizare este pentru producător de scule, așa că am încercat să creeze de urgență pentru anumite condiții absolute. Dacă nu se poate face, nu este criminal pentru proiectul meu, dar aș vrea să știu de ce nu se poate face.

Multumesc anticipat!

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

Cel mai bun răspuns

2

Puteți utiliza Document readystate la interactive de stat, și suprascrie onload atribut.

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

(Adăugat codul din comentariul tau pentru completitudine.)

2021-11-21 15:08:35

În alte limbi

Această pagină este în alte limbi

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