2011-03-03 43 views
4

我正在为Fennec做一个简单的扩展,它必须为每个加载的页面添加特殊的HTML元素。我创建了这个简单的overlay.js中:如何从Fennec扩展中收听页面加载?

var MyAddon = { 
    onLoad: function(aEvent){ 
     var appcontent = document.getElementById("appcontent"); // Firefox 
     if (!appcontent) { 
      appcontent = document.getElementById("browsers"); // Fennec 
     } 
     if (appcontent) { 
      appcontent.addEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true); 
     } 
    }, 

    onUnLoad: function(aEvent){ 
     var appcontent = document.getElementById("appcontent"); // Firefox 
     if (!appcontent) { 
      appcontent = document.getElementById("browsers"); // Fennec 
     } 
     if (appcontent) { 
      appcontent.removeEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true); 
     } 
    }, 

    onUIReady: function(aEvent){ 
    }, 

    onUIReadyDelayed: function(aEvent) { 
    }, 

    onDocumentLoad: function(aEvent) { 
    alert("OK"); 
    } 
}; 

window.addEventListener("load", MyAddon.onLoad, false); 
window.addEventListener("unload", MyAddon.onUnLoad, false); 
window.addEventListener("UIReady", MyAddon.onUIReady, false); 
window.addEventListener("UIReadyDelayed", MyAddon.onUIReadyDelayed, false); 

的问题是,警报显示只有一次,当浏览器启动时,我希望它显示在每个网页加载的。我究竟做错了什么?

的Fennec版本:4.0b5(测试在桌面版本的Windows)

谢谢!

回答

4

不幸的是,这对Fennec来说更为复杂。没有来自内容文档的“DOMContentLoaded”这样的事件。这是因为在主窗口中,你的覆盖附着在JavaScript中,生活在一个不同的进程子窗口(内容窗口)

你必须:

  1. 负载,每一个新的选项卡的脚本:

    browser.messageManager.loadFrameScript(“chrome://my_add_on/content/content.js”,true);

  2. 里面content.js,听取事件DOMContentLoaded:

    的addEventListener( “DOMContentLoaded” 过程中,真正的); 功能过程(事件){...}

欲了解更多信息,请查看此页: