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打开。
您无法自行触发键盘快捷键。
以这种方式将其视为事件的时间表:
- 发生硬件事件,并由OS转换为输入事件。
- 如果这是Chrome注册的全局快捷方式,或者Chrome专注,则操作系统会将事件发送给Chrome。
- Chrome会检查它是否为已注册的快捷方式。 如果是,则触发相应的事件。
- 如果它不是快捷方式,并且页面处于焦点,则Chrome会将事件作为DOM输入事件传递到页面中。
- 如果页面中有jQuery,它会将该DOM事件转换为自己的内部事件,匹配侦听器并将内部事件分派给它们。
您的代码只触发5(内部jQuery事件)。
通过直接操作DOM事件 ,最多可以达到4。
在任何情况下,扩展都不会在此堆栈中返回到3。
你试图从代码中以迂回的方式打开你的弹出窗口。 可悲的是,这根本不可能用于“普通”扩展 – 有意识地决定Chrome开发团队的一部分。
想想另一种提供UI的方式,比如通知或使用内容脚本在当前页面中注入某些内容 。