Javascript Firefox插件忽略iFrame

Javascript Firefox插件忽略iFrame,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我正在尝试为LinkedIn构建一个插件,但是contentscript会在每一帧中输出 My main.js: exports.main = function() { var pageMod = require("page-mod"); pageMod.PageMod({ include: "http://www.linkedin.com/*", contentScriptWhen: 'ready', contentScript: 'alert("test"

我正在尝试为LinkedIn构建一个插件,但是contentscript会在每一帧中输出

My main.js:

exports.main = function() {

  var pageMod = require("page-mod");

  pageMod.PageMod({
    include: "http://www.linkedin.com/*",
    contentScriptWhen: 'ready',
    contentScript: 'alert("test")'
  });
};
通过检查框架元素,如果是顶部框架,我可以执行操作

if(window.frameElement === null){ alert("YEAH this is the right place!); }

但是我的内容srcipt很复杂,并且使用jquery,并且该脚本仍然将脚本放在每个帧中…

更新,SDK的页面mod api现在支持“attachTo”,因此您可以改为:

var data = require("sdk/self").data;
var page = require('sdk/page-mod');

page.PageMod({
     match:['*'],
     contentScriptOptions: {},
     contentScriptFile: [data.url('myScript.js')],
     attachTo: 'top',
     onAttach: function(worker) {
         //set up hooks or other background behavior
     },
});

您可以研究两种方法:

一,。使用“选项卡”模块附加内容脚本。这是因为选项卡模块只处理顶级文档。下面是一个简单的例子:

二,。通过PageMod初始加载一个非常小的内容脚本,然后如果页面是您真正想要修改的,则通过port.emit消息发送脚本来注入脚本。dotjs插件中有一个此类方案的示例:


附加SDK不区分顶级文档和框架。因此,要么是您的方法,要么是帧的URL差异太大,您可以在
include
参数中过滤掉它们。