内容脚本事件侦听器不适用于所有选项卡? (Firefox 附加 SDK)

Content script event listener not working in all tabs? (Firefox add-on SDK)

在我的 Firefox SDK 附加组件中,我有一个简单的内容脚本,它向其页面添加了一个 keydown 事件侦听器并记录该事件:

//content-script.js
console.log("Running");
window.addEventListener("keydown", function(event) {
  console.log("Key down event");
});
window.focus();

并且我在 main.js 中编写了一个函数来设置此行为:

//main.js
function setupTab(tab) {
  console.log("setup");
  tab.attach({
    contentScriptFile: "./content-script.js"
  });
}

tabs.on("open", function(tab) {
  setupTab(tab);
});
setupTab(tabs.activeTab);

我的最终目标是 运行 在加载项启动时打开的所有选项卡以及之后打开的所有选项卡上的内容脚本。目前,我只是 运行 在活动选项卡和所有随后打开的选项卡上设置它。

当我 运行 加载项时,控制台会记录 "setup" 和 "Running" 并且还会记录我在初始 window 中所做的任何按键操作,这是预期的行为。但是,当我打开新标签时,第一个打开的新标签将记录 "setup" 和 "Running" 但它们不会记录任何按键。此后的每个新标签页都会记录 "setup"、"Running" 和按键。

我注意到 Firefox 的 Add-on SDK 版本 运行 每次都像是全新安装,第一个打开的新标签页(而且只有这个标签页)会弹出一个 "What is this page?"信息。这可能会以某种方式干扰,但如果是这样,我不知道如何规避它。

我怀疑您想要的行为是在每个活动选项卡上。所以代码可能是这样的:

//main.js
var tabs = require("sdk/tabs");    
tabs.on('ready', function (tab) {
    tabs.activeTab.attach({
      contentScriptFile: "./content-script.js"
    })
});