gpt4 book ai didi

javascript - 如何防止多次加载 Firefox SDK 内容脚本?

转载 作者:行者123 更新时间:2023-11-30 12:35:45 25 4
gpt4 key购买 nike

如何防止多次加载 Firefox SDK 内容脚本?我发现的文档和错误报告建议 contentScriptWhen 属性应该限制我的内容脚本的执行次数,但我发现它们在页面加载中运行了 2 到 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”标志来控制此行为 - 都不能阻止脚本执行多次。

最佳答案

原来这是 this question 的副本, 自然地,在我发布它的副本几个小时后,它才出现在搜索结果中。去图吧。

它引导我到 this question其中作者试图阻止他的插件在 iFrame 中运行。 Eureka !原来我的插件没有为同一页面多次“初始化”,但是 page-mod 没有区分页面和 iFrame。

我使用的解决方案是使用选项卡 API 将我的内容注入(inject)页面,如下所示:

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 应该只在顶部窗口而不是 iframes 上触发:

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
},
});

关于javascript - 如何防止多次加载 Firefox SDK 内容脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26149431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com