Firefox Add-On SDK:运行 新标签页中的内容脚本仅出现一次
Firefox Add-On SDK: Run content script in new tab only once
我正在尝试为 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";'
});
});
}
我猜有一种方法可以让这个 运行 只有在标签第一次出现时 "ready"。似乎是一项简单的任务,但我不知道该怎么做。有人有任何提示吗?
使用 tabs.activeTab.once();
而不是 tabs.activeTab.on();
。
这样,侦听器在拦截第一条消息后就会分离。
我正在尝试为 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";'
});
});
}
我猜有一种方法可以让这个 运行 只有在标签第一次出现时 "ready"。似乎是一项简单的任务,但我不知道该怎么做。有人有任何提示吗?
使用 tabs.activeTab.once();
而不是 tabs.activeTab.on();
。
这样,侦听器在拦截第一条消息后就会分离。