Событие, которое срабатывает перед DOMContentLoaded

#javascript #firefox #firefox-addon #xul

#javascript #firefox #firefox-дополнение #xul

Вопрос:

В моем расширении Firefox я использую DOMContentLoaded для определения загрузки страницы и вставки моего HTML. Есть ли событие, которое запускается до этого, и все еще документ доступен в это время?

Ответ №1:

Примечание: Этот ответ относится к расширениям на основе XUL. Начиная с Firefox 57, эта технология устарела. Упомянутая здесь функциональность больше не доступна для расширений.

Существует content-document-global-created уведомление, которое отправляется при создании документа, прежде чем в него добавляется какой-либо контент (если быть точным, это происходит, когда браузер получает HTTP-заголовки ответа и знает, что это не перенаправление или что-то подобное). Это самая ранняя точка, где вы можете получить документ. DOMContentLoaded Событие запускается, как только Gecko завершает загрузку содержимого документа, это ранний момент, когда вы можете получить доступ к полному DOM. Между ними есть множество других событий, например, множество событий прослушивателя прогресса — какой из них вы используете, зависит от того, что вы пытаетесь сделать, общего ответа нет.

Комментарии:

1. Я использую это уведомление. Это работает. Но это уведомление также генерируется для iframes. Как я могу узнать, отправлено ли уведомление из iframe или нет?

2. @SelvarajMA: Как насчет event.target.top == event.target ?

3. Я использую subject.parent.length == 0 . Это работает. Но тело недоступно при отправке этого уведомления. Есть ли какое-либо решение для этого. Я попытался использовать часы, которые будут проверять доступность для тела один раз в каждые 10 мс после получения этого уведомления. Но, похоже, это не работает. Есть ли какое-либо решение для этого?

4. @SelvarajMA: На странице, на которую ссылается Владимир, также упоминается ‘document-element-inserted’, который запускается при вставке корневого элемента в DOM. Зачем вам конкретно нужно тело?

5. @SelvarajMA: Как насчет document.documentElement.appendChild() ?