如何收听Fennec扩展程序的页面加载?

时间:2011-03-03 12:20:16

标签: firefox firefox-addon fennec

我正在为Fennec开发一个简单的扩展,它必须为每个加载的页面添加特殊的HTML元素。我创建了这个简单的overlay.js:

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的桌面版测试)

谢谢!

1 个答案:

答案 0 :(得分:4)

不幸的是,这对Fennec来说更复杂。来自内容文档的“DOMContentLoaded”事件没有。这是因为您的叠加层附加了Javascript的主窗口与子窗口(内容窗口)位于不同的进程中

你必须:

  1. 使用每个新标签加载脚本:

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

  2. 在content.js中,监听事件DOMContentLoaded:

    addEventListener(“DOMContentLoaded”,process,true); 功能过程(事件){...}

  3. 有关详细信息,请查看以下页面: