【问题标题】:Content script event listener not working in all tabs? (Firefox add-on SDK)内容脚本事件侦听器不适用于所有选项卡? (Firefox 附加 SDK)
【发布时间】:2015-04-01 01:11:46
【问题描述】:

在我的 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);

我的最终目标是在插件启动时打开的所有选项卡以及之后打开的所有选项卡上运行内容脚本。目前我只是在活动选项卡上运行它,然后所有打开的选项卡。

当我运行插件时,控制台会记录“设置”和“运行”,还会记录我在初始窗口中所做的任何按键操作,这是预期的行为。但是,当我打开新标签时,打开的第一个新标签将同时记录“设置”和“运行”,但它们不会记录任何按键。之后的每个新标签都会记录“设置”、“运行”和按键。

我注意到 Firefox 的 Add-on SDK 版本每次都像全新安装一样运行,并且第一个打开的新选项卡(并且只有这个选项卡)会弹出一个“这是什么页面?”信息。这可能会以某种方式干扰,但如果是这样,我不知道如何规避它。

【问题讨论】:

    标签: firefox-addon firefox-addon-sdk


    【解决方案1】:

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

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

    【讨论】:

    • 这真的很奇怪。这似乎会为所有内容添加双重事件侦听器,但它似乎在打开的第一个新选项卡上运行 only 。如果我将此添加到我的代码中,我确实会收到一些双重“正在运行”消息,但没有双重事件侦听器。如果我取出我的其他代码,我只会在第一个新选项卡上获得事件侦听器。所以我需要所有三个调用来正确设置事件监听器。无论如何,这行得通,所以谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多