#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()
?