Удалите определяемую атрибутом " загрузку` из `<тела>`

0

Вопрос

Я работаю над этим уже несколько часов и нахожусь на том этапе, когда мне кажется, что я, возможно, пытаюсь выполнить что-то невыполнимое. Любой совет или понимание, безусловно, приветствуются!

Вариант использования, на который я ориентируюсь, требует прерывания DOM-анализа браузера, прежде чем у него появится возможность нарисовать <body> элемент. Для достижения этой цели я использовал этот однострочный текст в качестве первого сценария, вызванного в моем <head> элемент:

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

Это успешно предотвращает вызов браузером любых последующих сценариев, и <body> элемент остается не визуализированным. Однако, если разметка включает в себя onload атрибут на <body> элемент, эта функция или код по - прежнему вызывается браузером.

Поскольку контекст, который перехватывает синтаксический анализ DOM, находится в <head>, Я не могу использовать document.body.removeEventListener() чтобы удалить прослушиватель событий, потому что body элемента еще не существует. Установка window.onload Для null не имеет никакого эффекта, и попытка перехватить настройку window.onload с помощью Object.defineProperty(window, 'onload', {...}). В каждом случае, onload функция или операторы все равно вызываются.

Чтобы предупредить очевидный вопрос о том, почему я не могу просто избежать использования <body onload="...">, вариант использования предназначен для инструментов разработчика, поэтому я пытаюсь создать непредвиденные обстоятельства для определенных абсолютных условий. Если это невозможно сделать, это не убивает мой проект, но я бы очень хотел знать, почему это невозможно сделать.

Заранее спасибо!

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

Лучший ответ

2

Вы можете использовать Состояние готовности документа в interactive состояние и перезаписать onload атрибут.

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

(Для полноты картины добавлен ваш код из вашего комментария.)

2021-11-21 15:08:35

На других языках

Эта страница на других языках

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