Плагин Firefox и document.ready - PullRequest
       10

Плагин Firefox и document.ready

1 голос
/ 09 апреля 2009

Я пытаюсь разработать плагин firefox, который должен запускаться всякий раз, когда страница загружается. Может кто-нибудь подсказать, какое событие использовать. В Firefox document.ready выполняется, когда я открываю новое окно, и не запускается, когда я открываю новую вкладку :(. Любая помощь приветствуется. Спасибо

1 Ответ

3 голосов
/ 09 апреля 2009

Первоначально я подключался к DOMContentLoaded, но это заняло слишком много времени, так как оно не сработает, пока Firefox не загрузит дерево DOM для страницы и любой из ее фреймов.

Load был таким же медленным, потому что он требует полной загрузки страницы, а также всех ее изображений.

В конечном итоге, пройдя через все это, а также настроив XPCOM для nsIWebProgressListener.onLocationChange и некоторых других, я в итоге остановился на DOMTitleChanged как таковом:

appcontent.addEventListener("DOMTitleChanged", events.onPageLoad, true);

(Обратите внимание, что DOMTitleChanged, похоже, срабатывает, даже если HTML-страница не имеет атрибута <title> или имеет эквивалент <title> предыдущей странице.)

Я не помню на 100%, почему я остановился на DOMTitleChanged, но я полагаю, что это потому, что это было лучше всего соответствует моим потребностям - это, по сути, самый быстрый способ получить навигационный URL пользователя без ожидания все, что нужно загрузить, одновременно запуская все возможные способы загрузки новой страницы ... новые вкладки, изменения страниц и все остальное.

Единственная загвоздка в том, что вам нужно будет добавить код для ручного поиска URL-адреса в оверлейном коде запуска вашего дополнения, как если бы вы не addEventListener() перед тем, как FF начнет загружать первую страницу в новом окне, вы добавите ваш слушатель событий слишком поздно, чтобы надежно отследить начальную загрузку страницы. (Это потому, что новый изолированный экземпляр вашего дополнения загружается каждый раз, когда Firefox открывает новое окно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...