我正在尝试为 Firefox 开发一个简单的附加组件,其工作原理如下:
- 用户点击上下文菜单中的项目。
- 新标签页已打开。
- 使用内容脚本覆盖新选项卡的内容 (innerHTML)。
此外,内容脚本只能执行一次,因此如果用户在新选项卡中输入网站,则不应执行脚本。
我已经可以编辑新选项卡内容了,但我唯一的问题是在打开选项卡时让内容脚本仅运行一次。在我目前的代码中,每次在选项卡中加载页面时都会运行脚本:
var contextMenu = require("sdk/context-menu");
var tabs = require("sdk/tabs");
var menuItem = contextMenu.Item({
label: "Test",
contentScript: 'self.on("click", function () { self.postMessage(); })',
onMessage: function (data) {
newTab();
}
});
function newTab () {
tabs.open("about:blank");
tabs.activeTab.on('ready', function (tab) {
tab.attach({
contentScript: 'document.body.innerHTML = "testing";'
});
});
}
我猜测有一种方法可以仅在选项卡第一次“就绪”时运行此操作。似乎是一个简单的任务,但我不知道如何做到这一点。有人有任何提示吗?
最佳答案
使用tabs.activeTab.once();
而不是tabs.activeTab.on();
。
这样,监听器在拦截到第一条消息后就会分离。
关于javascript - 火狐附加 SDK : Run content script in new tab only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663835/