4

我正在为 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 桌面版测试)

谢谢!

4

1 回答 1

4

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

你必须:

  1. 使用每个新选项卡加载一个脚本:

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

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

    addEventListener("DOMContentLoaded", process, true); 函数过程(事件){ ... }

有关更多信息,请查看以下页面:

于 2011-04-15T04:10:38.360 回答