内容脚本事件侦听器无法在所有选项卡中使用? (Firefox附加SDK)

时间:2015-04-01 01:11:46

标签: firefox-addon firefox-addon-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"和"跑步"并记录我在初始窗口中所做的任何按键操作,这是预期的行为。但是,当我打开新选项卡时,第一个打开的新选项卡将同时记录" setup"和"跑步"但他们不会记录任何按键。之后的每个新标签都会记录"设置","运行"和按键。

我注意到Firefox的附加SDK版本每次都像新安装一样运行,第一个新标签打开(只有这个标签)弹出一个"这是什么页面?&#34 ;信息。这可能会以某种方式干扰,但如果是这样,我就不知道如何规避它。

1 个答案:

答案 0 :(得分:1)

我怀疑你想要的行为是在每个活动标签上。所以代码可能是这样的:

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