2010-09-01 2 views
3

Я написал врезку аддон:
Firefox addon: Как запускать событие при загрузке страницы * начинается *?

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

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

  • о включении аддона
  • на оконной нагрузке
  • на AppContent нагрузки
  • на TabSelect

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

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

Запрашивать предложения/ссылки/образцы кода. Заранее спасибо.

ответ

1

Как и ожидалось ранее, 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

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

+0

Я использовал DOMContentLoaded, но это было слишком поздно снова на медленных страниц. В настоящее время я использую службу Observer (отправил фиктивный код ниже), и, похоже, я решил свою проблему. – Jumper

Смежные вопросы