DOMContentLoaded事件停止被触发。为什么?

时间:2012-05-29 20:02:52

标签: firefox firefox-addon

好吧,我正在开发一个firefox插件,可以通过一些修改自动重新加载一组给定的url。它不可能显示整个代码。所以,我只是复制粘贴代码的部分,这会给我错误。

DOMContentLoaded事件被假定为触发页面加载的所有内容,并且正确执行。问题是,如果我打开一个新标签页,则旧标签页中不会触发DOMContentLoaded事件。

//Any code here runs only for the first time u start the browser
window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = { 
init: function()    
{
            var appcontent = document.getElementById("appcontent");
            if(appcontent)
            appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
},

onPageLoad: function(aEvent)
{

    var doc = aEvent.originalTarget; // doc is document triggered "onload" event
    //execute on one the top page (not on iframes)
        if ((aEvent.originalTarget.nodeName == '#document') && (aEvent.originalTarget.defaultView.location.href == gBrowser.currentURI.spec)) 
        {setTimeout(function(){showInError(doc.location='about:home'}, 500);}  
},
}

我想以简单的方式写出问题(对不起我的英语不好)

1)我运行firefox,标签(比如标签1)会不断重新加载。

2)如果我不间断地离开页面(这就是它想要的那样),第1页的标签页继续反复加载

3)如果我打开一个新标签(比如标签2),则新标签(标签号2)开始按需要连续重新加载。但是,选项卡没有。 1停止重装。

我想要的是继续重新加载选项卡1和选项卡号。 2.怎么做?我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

尝试使用gBrowser而不是document.getElementById(“appcontent”);

gBrowser.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);

https://developer.mozilla.org/en/Code_snippets/On_page_load#Basic_onPageLoad_for_a_browser_window

答案 1 :(得分:0)

看起来您只在当前显示的页面(活动标签页)上执行脚本。

如果要在其他选项卡上执行它,则应在打开它们时将事件侦听器附加到新选项卡(并且在关闭选项卡时不要忘记将其删除)。您可以在此页面获取此功能的有用摘要:

https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads#WebProgressListeners