Firefox extension: run when page loaded

Psy*_*hoX 3 javascript firefox-addon dom-events

I'm trying to write firefox extension which will run when a (specific) page is loaded (it will be same key words replace).

I write code like:

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();
    }                       
};
Run Code Online (Sandbox Code Playgroud)

But onPageLoad is never run... no alert... Can somebody please tell me what I'm doing wrong?

Wla*_*ant 5

首先是关于获取浏览器元素的一些话。在 Firefox 中,此元素具有 ID content,而不是appcontent。尽管如此,获得它的推荐方法是window.gBrowser变量。在 Thunderbird 5 中,浏览器元素的 ID 发生了变化,因此您的代码将停止工作 - 而不是通过 ID,您应该使用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)
  ...
Run Code Online (Sandbox Code Playgroud)

现在关于监听页面加载,这里推荐的方法是进度监听器 - 请参阅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);
  }
}
Run Code Online (Sandbox Code Playgroud)