如何防止多次加载Firefox SDK内容脚本?我发现的文档和错误报告建议contentScriptWhen
属性应该限制我的内容脚本执行的次数,但我看到它们在页面加载中运行的时间从两次到15次。
这是我的main.js中的内容:
var data = require("sdk/self").data;
var tabs = require('sdk/tabs');
var pageMod = require('sdk/page-mod');
pageMod.PageMod({
include: ['*'],
contentScriptWhen: "ready",
contentScriptFile: [data.url("extBootstrapper.js"), data.url("extContent.js")],
onAttach: function(worker) {
//handlers for AJAX and changing preferences, etc
...
});
我尝试使用contentScriptWhen
属性控制此行为,以及使用“已加载”'每个脚本上的标志 - 既不会阻止脚本多次执行。
答案 0 :(得分:3)
原来这是this question的副本,当然,在我发布副本后的几个小时内,它只出现在搜索结果中。去图。
它引导我this question,其中作者试图阻止他的插件在iFrame中运行。找到了!原来我的插件并没有初始化"同一页面多次,但page-mod
并未区分页面和iFrame。
我使用的解决方案是使用制表符API将我的内容注入页面,如下所示:
var data = require("sdk/self").data;
var tabs = require('sdk/tabs');
tabs.on('ready', function(tab) {
var worker = tab.attach({
contentScriptOptions: {},
contentScriptFile: [data.url('myScript.js')]
});
// now set up your hooks:
worker.port.on('someKey', function(data) {
//do whatever with your data
});
});
原来这个问题的another version也存在,其中attachTo
属性用于指定pageMod.onAttach只应在顶部窗口而不是iframe上触发:
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
},
});