background.js 中的 Chrome 扩展 keydown 监听器

Jac*_*tle 1 javascript google-chrome google-chrome-extension

我正在创建一个扩展,允许用户在 Vivaldi 浏览器上使用类似 chrome 的选项卡切换。

在我的background.js中我尝试过

addEventListener("keydown", function(e) {
    console.log(e.code); // never gets here
})
Run Code Online (Sandbox Code Playgroud)

我最初让该事件由 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();
Run Code Online (Sandbox Code Playgroud)

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

Xan*_*Xan 5

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

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

您可能想查看chrome.commandsAPI,但它的限制相当严格。有充分的理由:你真的真的不希望扩展程序能够收集所有击键。

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