Firefox Add-On SDK:运行 新标签页中的内容脚本仅出现一次

Firefox Add-On SDK: Run content script in new tab only once

我正在尝试为 Firefox 开发一个简单的附加组件,它应该像这样工作:

  1. 用户单击上下文菜单中的项目。
  2. 打开新标签页。
  3. 新选项卡的内容 (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();。 这样,侦听器在拦截第一条消息后就会分离。