javascript - pageMod 多次附加 worker

标签 javascript firefox-addon firefox-addon-sdk

我在开发扩展时遇到了这个问题。我根据选项卡就绪事件将 pageMod 附加到页面以修改页面的内容,但是当我重新加载页面时,工作人员似乎又附加了一次,因此在 1 次重新加载后,它会为同一网址加载 2 个工作人员(没有 iframe),在 2 次重新加载后,它会加载 3 个工作线程,等等。这是我开始使用的初始代码(我将其从较大的 block 中剥离出来):

mod = null;   

tabs.on('ready', function(tab) {    
    mod = this.pageMod.PageMod({
        include: ["*"],
        contentScriptFile: ["resource://data/full_page.js"],
        attachTo: ["top", "frame", "existing"],
        onAttach: function(worker) {
            Logger.log('---------> worker.url is ' + worker.url);
        }
    });
}

我能够通过在就绪事件处理程序的最开始附加此代码来销毁每个就绪事件上的 mod,从而在某种程度上解决此问题。

mod = null;   

tabs.on('ready', function(tab) {
    if (mod) {
        mod.destroy();
    }

    mod = this.pageMod.PageMod({
        include: ["*"],
        contentScriptFile: ["resource://data/full_page.js"],
        attachTo: ["top", "frame", "existing"],
        onAttach: function(worker) {
            Logger.log('---------> worker.url is ' + worker.url);
        }
    });
}

但是,我仍然看到第一次重新加载后连接了两个工作人员,第二次重新加载后连接了三个工作人员,依此类推。我确保我的监听器仅初始化一次。以前有人遇到过这个吗?是我使用方法不正确吗? 谢谢! 卢卡

最佳答案

不,你没有正确使用它。 pagemod 只需要设置一次。准备就绪后它会自动连接。您创建的页面 mod 将附加到每个新页面 (["*"])。每次加载新页面时,都会创建一个附加到每个新选项卡的新 pagemod...

如果您想在每个页面中插入内容脚本,只需删除就绪监听器即可。

    mod = this.pageMod.PageMod({
        include: ["*"],
        contentScriptFile: ["./full_page.js"],
        attachTo: ["top", "frame", "existing"],
        onAttach: function(worker) {
            Logger.log('---------> worker.url is ' + worker.url);
        }
    });

如果您想对特定选项卡使用就绪监听器,attach a script to the tab :

tabs.on('ready', function(tab) {    
    var worker = tab.attach({
        contentScriptFile: ["./full_page.js"]
    });
    Logger.log('---------> worker.url is ' + worker.url);
}

关于javascript - pageMod 多次附加 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083725/

相关文章:

javascript - 检测打开新选项卡/窗口的原始选项卡(如果有)

javascript - 自定义过渡彩色菜单

javascript - Firefox插件开发,打开一个隐藏的网络浏览器

javascript - javascript异步回调函数之间传递参数

javascript - 火狐插件: get document from a tab

firefox - 无权加载: sdk/window/utils (Firefox addon SDK)

firefox-addon-sdk - 如何在 Mozilla Addon SDK 中加载页面之前获取选项卡的 url?

javascript - jquery 数据表中第 0 行请求未知参数 1

javascript - MySQL查询表行上的onclick事件

javascript - 为我认为我定义的数组获取 Uncaught ReferenceError