是否可以覆盖Ctrl+ D?我想,例如console.log
,而不是添加到书签的链接。
3 回答
可以使用chrome.commands
API 覆盖快捷方式。扩展程序可以在清单文件中建议一个默认快捷方式(例如 Ctrl+D),但用户可以在 处随意覆盖它chrome://extensions/
,如下所示:
用法
此 API 仍在开发中,仅在Beta和Dev渠道可用,并且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});
});
}
});
文档
没有必要使用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>
。
替代解决方案:在浏览器的地址栏中键入 chrome:extensions。这将打开 Chrome 扩展页面。
单击左上角菜单中的键盘快捷键(“菜单/汉堡按钮”)
将 Ctrl-D 分配给不会更改书签的插件。
这将解决当您不小心按Ctrl-D时直接创建书签的问题,而不是在这种情况下会弹出另一个插件。