pageMod多次附加工作者

时间:2015-06-26 23:51:07

标签: javascript firefox-addon firefox-addon-sdk

我在处理扩展程序时遇到过此问题。我正在基于tab ready事件将pageMod附加到页面上以修改页面内容,但是当我重新加载页面时,worker似乎再次连接,所以在1次重新加载后它会为同一个url加载2个worker (没有iframes),在2次重新加载后,它加载了3个工人,等等。这是我开始使用的初始代码(我将其从更大的块中删除):

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);
        }
    });
}

通过在ready事件处理程序的最开头附加此代码,我可以通过在每个ready事件上销毁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);
        }
    });
}

但是,我仍然看到两个工作人员在第一次重新加载后被连接,三次在第二次重新加载后等等。我确保我的监听器只被初始化了一次。以前有人遇到过这个吗?我没有正确使用它吗? 谢谢! 卢卡

1 个答案:

答案 0 :(得分:1)

不,你没有正确使用它。只需设置一次pagemod即可。它会自动连接就绪。您创建的页面模型将附加到每个新页面(["*"])。每次加载新页面时,都会创建一个新的pagemod,它附加到每个新标签页......

如果要在每个页面中插入内容脚本,只需删除准备好的侦听器。

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

如果您想使用针对特定标签的on ready listener,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);
}