Javascript Firefox插件忽略iFrame
我正在尝试为LinkedIn构建一个插件,但是contentscript会在每一帧中输出 My main.js: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"
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
参数中过滤掉它们。