Расширение Firefox: запускается при загрузке страницы - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь написать расширение Firefox, которое будет работать при загрузке (определенной) страницы (будут заменены те же ключевые слова).

Я пишу код, подобный:

window.addEventListener("load", function()  maApp.init(); }, false);
var maApp= {

  init: function() {
    var appcontent = document.getElementById("appcontent");   // browser
    if(appcontent)
      appcontent.addEventListener("DOMContentLoaded", maApp.onPageLoad, true);
    var messagepane = document.getElementById("messagepane"); // mail
    if(messagepane)
      messagepane.addEventListener("load", function(event) { maApp.onPageLoad(event); }, true);
  },
    onPageLoad: function() {
           alert("test);
        doSomething();
    }                       
};

Но onPageLoad никогда не запускается ... без предупреждения ... Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

4 голосов
/ 24 июня 2011

Сначала несколько слов о получении элемента браузера. В Firefox этот элемент имеет идентификатор content, а не appcontent. Тем не менее, рекомендуемый способ получить его - переменная window.gBrowser. В Thunderbird 5 идентификатор элемента браузера изменился, поэтому ваш код перестанет работать - вместо того, чтобы переходить по идентификатору, следует использовать переменную window.messageContent, которая будет работать как в текущей, так и в будущих версиях. Вместе вы получите:

var browser = null;
if ("gBrowser" in window)
  browser = window.gBrowser;             // Firefox and SeaMonkey Browser
else if ("messageContent" in window)
  browser = window.messageContent;       // Thunderbird
else if ("getMessageBrowser" in window)
  browser = window.getMessageBrowser();  // SeaMonkey Mail

if (browser)
  ...

Теперь, что касается прослушивания загрузки страниц, рекомендуемый подход здесь - слушатели прогресса - см. https://developer.mozilla.org/en/Code_snippets/Progress_Listeners.. Вы подключаете слушатель прогресса к браузеру и ищите изменения состояния:

onStateChange: function(aWebProgress, aRequest, aFlag, aStatus)
{
  if ((aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) &&
      (aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_WINDOW))
  {
    // A window finished loading
    doSomething(aWebProgress.DOMWindow);
  }
}
...