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

时间:2016-06-23 13:51:59

标签: javascript jquery google-chrome-extension keyboard-shortcuts

我正在构建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 个答案:

答案 0 :(得分:4)

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

将其视为事件的时间表:

  1. 发生硬件事件,并由OS转换为输入事件。
  2. 如果它是Chrome注册的全局快捷方式,或者Chrome专注,则操作系统会将事件发送给Chrome。
  3. Chrome会检查它是否为已注册的快捷方式。如果是,则触发相应的事件。
  4. 如果它不是快捷方式,并且页面处于焦点,则Chrome会将该事件作为DOM输入事件传递到页面中。
  5. 如果页面中有jQuery,它会将该DOM事件转换为自己的内部事件,匹配侦听器并将内部事件分派给它们。
  6. 您的代码仅触发5(内部jQuery事件) 到directly manipulating DOM events,你可以达到4 在任何情况下,扩展都不会回到此堆栈中的3。

    您正试图以迂回的方式从代码中打开弹出窗口。可悲的是,simply not possible at all对于普通"扩展 - 对Chrome开发团队的一部分有意识的决定。

    想一想提供用户界面的另一种方法,比如说,notifications或在Content Scripts的当前页面中注入一些内容。