在Chrome中覆盖书签快捷键(Ctrl + D)功能

13

是否可以覆盖Ctrl+D这个快捷键?例如我想要使用console.log等功能,而不是添加到书签中。

3个回答

10

使用chrome.commands API可以覆盖快捷方式。扩展程序可以在清单文件中建议默认的快捷键(例如Ctrl + D),但用户可以在 chrome://extensions/ 下自由覆盖它,如下图所示:

Keyboard Shortcuts - Extensions and Apps

用法

此API仍在开发中,仅适用于BetaDev渠道,以及Canary版本更多信息。从Chrome 24开始,它可能会面向所有人提供。

如果您想在Chrome 23或更低版本中测试API,请将“experimental”权限添加到清单文件中,并改为使用chrome.experimental.commands而不是chrome.commands。还要访问chrome://flags/并启用“实验性扩展API”,或使用--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});
         });
    }
});

文档


谢谢,这个可以工作。但是你应该记住,即使在“配置命令”对话框中更改了快捷键,你也会永久覆盖Ctrl+D。也就是说,用户将无法使用/打开默认的Chrome对话框来创建书签。 - cnmuc

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>

3
以下情况下无法使用此方法: 1. 在页面上下文之外,例如地址栏。 2. 受限页面,例如新标签页或Chrome Web Store。 3. 隐身模式或没有适当权限的 file://。尽管如此,这是在旧版Chrome中唯一可行的方法。 - Rob W

3

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

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

将Ctrl-D指定到一个不会改变你的书签的插件。

这样就可以解决当你意外按下Ctrl-D时直接创建书签的问题,而是弹出另一个插件。


1
虽然我认为Rob W的答案更加“纯粹”,但我认为这个解决方案会满足大多数人的需求,因为他们可以将ctrl+d映射到任何已有的插件上。注意:我不得不在“键盘快捷方式”页面的“输入快捷方式”框中按住<ctrl>+d。我不确定Jens在这里提到的“Strg-D”是什么。 - airfishey
1
抱歉,Strg 是 Ctrl 的德语标签。我混淆了语言。已修复。 - Jens Kisters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接