在background.js的Chrome扩展名keydown听众

时间:2016-04-20 09:40:50

标签: javascript google-chrome google-chrome-extension

我正在创建一个扩展程序,允许用户在Vivaldi浏览器上使用类似Chrome的标签切换。

在我的background.js中我试过

addEventListener("keydown", function(e) {
    console.log(e.code); // never gets here
})

我最初让事件由content.js脚本处理,但是这需要在我将消息发送到background.js脚本之前完全加载任何新标签

function Listener()
{
    this.stage = 0;
    this.listen();
}

Listener.prototype.listen = function()
{
    addEventListener("keydown", this.handleKeyDown);
    addEventListener("keyup", this.handleKeyUp);
}

Listener.prototype.handleKeyDown = function(event)
{
    for(var i = 0; i < 9; i++) {
        if(event.ctrlKey) {
            if(event.code == "Digit" + (i + 1)) {
                chrome.runtime.sendMessage({
                    greeting: i
                }, function(response) {
                    console.log(response);
                })
            }
        }
    }
}
new Listener();

我想将此功能移至我的background.js,以便它独立于浏览器操作运行。

1 个答案:

答案 0 :(得分:2)

DOM键盘事件侦听器仅捕获焦点位于页面内时发生的击键。

无法显示背景页面,因此无法对焦。它永远不会收到任何输入事件。

您可能希望查看chrome.commands API,但这是相当严格的。有一个很好的理由:你真的,真的不希望扩展能够收获所有的击键。

您可以通过使用(有效)命令调用扩展来部分绕过限制,这将打开其弹出窗口,而弹出窗口又可以使用DOM侦听器捕获更多事件。