在 Mozilla Add-On SDK 中限制 page-mod 目标的任何方法

Any way to restrict targets of page-mod in Mozilla Add-On SDK

我目前正在使用 SDK 开发 Firefox 插件,该 SDK mod以特定方式生成页面的文本内容。但是,我运行遇到了下面的问题。

假设我有 2 个选项卡,这两个选项卡都加载了相同的网站。该站点有多个iframe,有些是跨域的。我只需要更新我当前所在的选项卡中的页面。

如果我使用 tab.attach() 将工作人员添加到选项卡,我可以将我的内容更改代码注入到该选项卡,所以一切都很好。除了它不影响 iframe。

为了访问 iframe,我必须使用像这样的 PageMod:

tabs.on('ready', function(tab) {
    pageMod.PageMod({
            include: tab.url,
            contentScriptFile: self.data.url('./pagemod.js'),
            attachTo: ["top", "frame", "existing"],
            onAttach: function(worker) {
                worker.on('message', function(msg){
                    me.handleMessage(msg);
                });
                tracker.workers.push(worker);
            }
        });
    } 
});

它工作正常,因为它将工作人员附加到框架和顶级文档,所以我可以将我的代码注入到所有这些框架中。但是,它也会影响我在第二个选项卡中打开的另一个页面,因为它具有相同的 url。

有什么方法可以将页面 mod 效果限制在当前选项卡上吗?我没有发现任何明显的东西,但也许我已经看得太久了。

谢谢!

每个tab has an id and you can always access the current active tab this way。所以在 onAttach 属性中你可以做 if tab.id == tabs.activeTab.id { doSomethingElse(); }.