Chrome扩展程序中的触发器快捷方式

我正在构建Chrome扩展程序,并将命令_execute_browser_action分配给Alt + J. 我想在background.js中模拟这个,它监听所有使用的命令

 chrome.commands.onCommand.addListener(function(command) { /* ... */ }); 

我想通过一个不同的命令快捷方式调用_execute_browser_action ,比如Cmd + Shift + K.

在我的manifest.json中,我声明了以下内容:

 "commands": { "_execute_browser_action": { "suggested_key": { "mac": "Alt+J", "linux": "Ctrl+Shift+J" } }, "asdf" : { "suggested_key": { "default": "Ctrl+Shift+K", "mac": "Command+Shift+K" }, "description": "asdf" } } 

这是我的background.js:

 chrome.commands.onCommand.addListener(function(command) { console.log('onCommand event received for message: ', command); if (command === "asdf") { alert("asdf"); var keyPress = jQuery.Event("keypress"); keyPress.altKey = true; keyPress.ctrlKey = false; keyPress.which = 74; //how do I trigger this? } }); 

我想知道如何触发这个,以便我的popup.html打开。

您无法自行触发键盘快捷键。

以这种方式将其视为事件的时间表:

  1. 发生硬件事件,并由OS转换为输入事件。
  2. 如果这是Chrome注册的全局快捷方式,或者Chrome专注,则操作系统会将事件发送给Chrome。
  3. Chrome会检查它是否为已注册的快捷方式。 如果是,则触发相应的事件。
  4. 如果它不是快捷方式,并且页面处于焦点,则Chrome会将事件作为DOM输入事件传递到页面中。
  5. 如果页面中有jQuery,它会将该DOM事件转换为自己的内部事件,匹配侦听器并将内部事件分派给它们。

您的代码只触发5(内部jQuery事件)。
通过直接操作DOM事件 ,最多可以达到4。
在任何情况下,扩展都不会在此堆栈中返回到3。

你试图从代码中以迂回的方式打开你的弹出窗口。 可悲的是,这根本不可能用于“普通”扩展 – 有意识地决定Chrome开发团队的一部分。

想想另一种提供UI的方式,比如通知或使用内容脚本在当前页面中注入某些内容 。