是否可以覆盖 Ctrl + D ?我想,例如console.log
或其他东西,而不是添加书签的链接。
答案 0 :(得分:9)
可以使用chrome.commands
API覆盖快捷方式。扩展程序可以在清单文件中建议默认快捷方式(例如Ctrl + D),但用户可以在chrome://extensions/
处覆盖此权限,如下所示:
此API仍在开发中,仅在Beta和Dev渠道提供,而Canary版本 More info 。它可能适用于从Chrome 24开始的每个人。
如果您要在Chrome 23或更低版本中测试API,请向清单文件添加“实验性”权限,并使用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});
});
}
});
答案 1 :(得分:4)
没有必要使用chrome.commands
- 您可以使用内容脚本来捕获keydown
事件,在其上调用preventDefault
和stopPropagation
,然后处理它你要。应作为内容脚本的一部分工作的示例代码段:
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-N
和ctrl-<tab>
。
答案 2 :(得分:0)
替代解决方案: 在浏览器的地址栏中输入chrome:extensions。这将打开Chrome扩展程序页面。
单击左上方菜单中的键盘快捷键(“菜单/汉堡按钮”)
将Strg-D分配给不会改变书签的插件。
这将解决当您不小心按下Ctrl-D时直接创建书签的问题,而在这种情况下会弹出其他插件。