Usuń zdefiniowany atrybut " pobieranie` z `<ciała>`

0

Pytanie

Pracuję nad tym od kilku godzin i jestem na tym etapie, kiedy wydaje mi się, że, być może, staram się wykonać coś jest niewykonalne. Wszelkie porady i zrozumienie, na pewno są mile widziane!

Opcja użycia, na który ja się orientuję, wymaga przerwania DOM-analizy przeglądarki, zanim miał okazję narysować <body> element. Dla osiągnięcia tego celu użyłem ten jednoliniowy tekst jako pierwszego skryptu, spowodowanego w moim <head> element:

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

To skutecznie uniemożliwia wywołanie przeglądarki każdych kolejnych scenariuszy i <body> element pozostaje nie визуализированным. Jednak, jeśli układ zawiera onload atrybut na <body> element, funkcja lub kod nadal jest wywoływana przez przeglądarkę.

Ponieważ kontekst, który przechwytuje analizy DOM, położony jest w <head>Nie mogę użyć document.body.removeEventListener() aby usunąć detektor zdarzeń, bo body elementu jeszcze nie istnieje. Instalacja window.onload Dla null nie ma żadnego efektu, a próba przechwycenia ustawienie window.onload z pomocą Object.defineProperty(window, 'onload', {...}). W każdym przypadku, onload funkcja lub operatorzy nadal są wywoływane.

Aby ostrzec oczywiste pytanie o to, dlaczego nie mogę po prostu uniknąć stosowania <body onload="...">opcja użycia jest dla programisty, więc staram się stworzyć nieprzewidziane okoliczności określonych bezwzględnych warunków. Jeśli to nie da się zrobić, to nie zabija mój projekt, ale bardzo chciałbym wiedzieć, dlaczego to nie da się zrobić.

Z góry dziękuję!

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

Najlepsza odpowiedź

2

Można użyć Stan gotowości dokumentu w interactive stan i zastąp onload atrybut.

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

(Dla kompletności obrazu dodany do twój kod z twojego komentarza.)

2021-11-21 15:08:35

W innych językach

Ta strona jest w innych językach

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