Дополнение Firefox: Как вызвать событие, когда загрузка страницы * начинается *? - PullRequest
3 голосов
/ 01 сентября 2010

Я написал аддон боковой панели:

  • , который выбирает URL текущей страницы
  • звонит на персональный сервер с URL
  • и отображает контекстную информацию на боковой панели

В настоящее время эта функция вызывается при следующих событиях:

  • при включении аддона
  • при загрузке окна
  • при загрузке содержимого
  • на вкладкеВыбрать

Однако бывают случаи, когда веб-странице требуется слишком много времени для запуска события «load». Следовательно, я бы предпочел, чтобы вызывал функциональность моего аддона, как только отправляется первый запрос на текущую страницу .

Мне сказали, что Слушатель Прогресса и Наблюдатель могут помочь. Я попробовал быстрый и грязный код Progress-Listener, но он не сработал так, как задумано (возможно, это моя вина).

Запрос предложений / ссылок / примеров кода. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Как и ожидалось ранее, Observer был именно тем, что было нужно.Все, что мне нужно было сделать, это прослушать тему «http-on-modify-request» и вызвать пользовательский метод (на основе любой необходимой пользовательской проверки).

Пример кода:

var MyAwesomeObserver = {
observe: function(subject, topic, data)
{
    if (topic == "http-on-modify-request") {
        MyLogger.info('Yosssssssss! '+topic); //customer Logger that uses nsIConsoleService
        MyAwesomeObject.notSoAwesomeFunction(); //invoke the custom method here
    }
},

get observerService() {
    return Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService);
},

register: function(){
    this.observerService.addObserver(this, "http-on-modify-request", false);
},

}
   MyAwesomeObserver.register();
0 голосов
/ 01 сентября 2010

Первое, что приходит на ум, это событие 'DOMContentLoaded'. Я думаю, это должно быть быстрее, чем «загрузка», но попробуйте и посмотрите.

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