13

是否可以覆盖Ctrl+ D?我想,例如console.log,而不是添加到书签的链接。

4

3 回答 3

10

可以使用chrome.commandsAPI 覆盖快捷方式。扩展程序可以在清单文件中建议一个默认快捷方式(例如 Ctrl+D),但用户可以在 处随意覆盖它chrome://extensions/,如下所示:

键盘快捷键 - 扩展和应用程序

用法

此 API 仍在开发中,仅在BetaDev渠道可用,并且Canary构建 更多信息。从 Chrome 24 开始,每个人都可以使用它。

如果要在 Chrome 23 或更低版本中测试 API,请在清单文件中添加“实验”权限,并chrome.experimental.commands使用chrome.commands. 还可以访问chrome://flags/并启用“Experimental Extension APIs”,或使用该--enable-experimental-extension-apis标志启动 Chrome。

manifest.json

{
    "name": "Remap shortcut",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "permissions": [
        "tabs"
    ],
    "commands": {
        "test-shortcut": {
            "suggested_key": {
                "default": "Ctrl+D",
                "mac": "Command+D",
                "linux": "Ctrl+D"
            },
            "description": "Whatever you want"
        }
    }
}

background.js

// Chrome 24+. Use chrome.experimental.commands in Chrome 23-
chrome.commands.onCommand.addListener(function(command) {
    if (command === 'test-shortcut') {
         // Do whatever you want, for instance console.log in the tab:
         chrome.tabs.query({active:true}, function(tabs) {
             var tabId = tabs[0].id;
             var code = 'console.log("Intercepted Ctrl+D!");';
             chrome.tabs.executeScript(tabId, {code: code});
         });
    }
});

文档

于 2012-11-17T11:21:19.970 回答
7

没有必要使用chrome.commands——您可以使用内容脚本来捕获keydown事件、调用preventDefaultstopPropagation处理它,并随心所欲地处理它。应该作为内容脚本的一部分工作的示例片段:

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && String.fromCharCode(event.keyCode) === 'D') {
    console.log("you pressed ctrl-D");
    event.preventDefault();
    event.stopPropagation();
  }
}, true);

唯一不能以这种方式覆盖的是窗口处理命令,例如ctrl-Nctrl-<tab>

于 2012-11-17T18:55:53.447 回答
3

替代解决方案:在浏览器的地址栏中键入 chrome:extensions。这将打开 Chrome 扩展页面。

单击左上角菜单中的键盘快捷键(“菜单/汉堡按钮”)

将 Ctrl-D 分配给不会更改书签的插件。

这将解决当您不小心按Ctrl-D时直接创建书签的问题,而不是在这种情况下会弹出另一个插件。

于 2018-04-09T06:18:45.183 回答