如何防止Firefox SDK内容脚本多次加载
How do I prevent Firefox SDK content scripts from loading multiple times?
如何防止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
属性来控制这种行为,也尝试过在每个脚本上都有一个"isLoaded"标志——这两个标志都不会阻止脚本多次执行。
原来这是这个问题的重复,自然,这个问题在我发布重复后的几个小时才出现在搜索结果中。想想看。
这让我想到了这个问题,作者试图阻止他的插件在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
});
});
事实证明,这个问题也存在另一个版本,其中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
},
});
相关文章:
- 借助asp.net验证或java脚本对多个文本进行验证
- Google Adsense多次加载脚本
- 如何使用谷歌页面速度CSS加载脚本延迟多个CSS文件
- 脚本执行多次
- 使用一个倒计时脚本进行多次倒计时
- 使用Java脚本访问多个Google日历-Google日历API
- 从Java脚本返回多个值,这些值不能在firefox上运行(在IE上运行良好)
- 从主脚本到内容脚本的多条消息
- 通过Java脚本设置多个县的时钟
- 对单个 PHP 脚本的多个 AJAX 调用划分工作负载 = 服务器端多线程
- 我有一个脚本添加多个标记到交互式谷歌地图.我希望所有的标记都能容纳不同的信息窗口
- 用LUA脚本编写多个JS文件?(同时)
- 如何使用chart.js脚本绘制多个饼图
- Chrome扩展-注入脚本在多个页面
- 在Android上使用java脚本为多个设备创建应用程序
- 脚本用于多个异步Html.BeginForm
- 套件脚本 从多选字段加载项目记录
- 什么会导致Firefox在执行外部脚本后多次请求资源
- 使用按钮id通过java脚本选择多个单选按钮
- 如何让这个jQuery脚本在多个元素上单独运行