pageMod 多次附加工人

pageMod attaching workers multiple times

我在处理扩展时遇到了这个问题。我根据选项卡就绪事件将 pageMod 附加到页面以 mod 确认页面内容,但是当我重新加载页面时,工作人员似乎又被附加了一次,因此在 1 次重新加载后加载 2相同 url(无 iframe)的工作人员,在 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);
        }
    });
}

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

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

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

如果您想在每个页面中插入一个内容脚本,只需去掉 on ready 侦听器即可。

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