小编Jer*_*ron的帖子

DOMContentLoaded事件针对单个页面加载触发两次

几个月前我创作了一个最近失败的Firefox附加组件.附加组件基本上查找特定的URL,然后修改页面的DOM.我追踪了"AVG Safe Search"插件的(意外)安装失败.我发现,在禁用AVG插件的情况下,DOMContentLoaded事件会为文档触发一次(我最初预期的行为),但启用它后,DOMContentLoaded事件会为文档触发两次.我的加载项将一个列插入到HTML表中,因此事件会触发两次,所以会插入两个重复的列而不是一个.

这是我的附加组件的精简初始化代码:

var hLoadListener = function(event) { myAddon.initialize(event); }
var hContentLoadedListener = function(event) { myAddon.onContentLoaded(event); }

myAddon.initialize = function(aEvent)
{
    gBrowser.addEventListener("DOMContentLoaded", hContentLoadedListener, false);
};

myAddon.onContentLoaded = function(aEvent)
{
    if (!(aEvent.originalTarget.nodeName === "#document")) { return; }

    var doc = aEvent.target; // document that triggered "onload" event

    if (!(doc instanceof HTMLDocument)) { return; }
    if (!doc.location) { return; }

    var href = doc.location.href; // URL of current page

    if (URLRegExp.test(href))
    {
      // Modify the page's DOM
    }
};

window.addEventListener("load", hLoadListener, …
Run Code Online (Sandbox Code Playgroud)

javascript dom event-handling firefox-addon

9
推荐指数
2
解决办法
4095
查看次数

标签 统计

dom ×1

event-handling ×1

firefox-addon ×1

javascript ×1