如何听从Fennec扩展页面加载? [英] How to listen to page loads from Fennec extension?

查看:119
本文介绍了如何听从Fennec扩展页面加载?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为Fennec做一个简单的扩展,它必须为每个加载的页面添加特殊的HTML元素。我已经创建了这个简单的overlay.js:
$ b $ pre $ var MyAddon = {
onLoad:function(aEvent){
var appcontent = document.getElementById(appcontent); // Firefox
if(!appcontent){
appcontent = document.getElementById(browsers);如果(appcontent){
appcontent.addEventListener(DOMContentLoaded,MyAddon.onDocumentLoad,true); // Fennec
}


},

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



$ b 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桌面版上测试)
$ b 谢谢!

解决方案

不幸的是,这对Fennec来说更为复杂。不存在来自内容文档的DOMContentLoaded事件。这是因为你的覆盖层附加了Javascript的主窗口和子窗口(内容窗口)存在不同的进程。你必须:


$ b


  1. 加载每个新标签的脚本:
    $ b browser.messageManager.loadFrameScript chrome://my_add_on/content/content.js,true);


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



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




  3. 有关更多信息, / p>


    I'm working on a simple extension for Fennec, which must add special HTML element to every loaded page. I've created this simple 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);
    

    The problem is that alert is shown only one time when browser is started, I'd expect it to show on every page that loads. What am I doing wrong?

    Fennec version: 4.0b5 (testing on Desktop version for Windows)

    Thanks!

    解决方案

    Unfortunately, this is more complex for Fennec. There is no such event as "DOMContentLoaded" coming from the content document. This is because the main window, where your overlay attached the Javascript, lives in a different process than the child windows (content windows)

    You have to:

    1. load a script with each new tab:

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

    2. Inside content.js, listen to the event DOMContentLoaded:

      addEventListener("DOMContentLoaded", process, true); function process(event) { ... }

    For more info, check this pages:

    这篇关于如何听从Fennec扩展页面加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆