是否可以捕获这些快捷方式?
我试过了,但没用:
$(window).keydown(function(event) {
console.log(event.keyCode);
event.preventDefault();
});
当我按 T 时,它会在控制台中显示
84
,但如果我按 Ctrl+T ,它不会显示任何内容,并打开一个新选项卡。
我想捕获这些快捷方式并阻止任何浏览器操作。
$(window).keydown(function(event) {
if(event.ctrlKey && event.keyCode == 84) {
console.log("Hey! Ctrl+T event captured!");
event.preventDefault();
}
if(event.ctrlKey && event.keyCode == 83) {
console.log("Hey! Ctrl+S event captured!");
event.preventDefault();
}
});
(6.0.1测试)
在 Firefox 中,两个事件监听器都可以工作。如果您按 CtrlT 或 CtrlS 组合键,您将在控制台上收到两条消息,并且浏览器不会打开选项卡,也不会要求保存。
有趣的是,如果您使用
alert
而不是console.log
,则event.preventDefault()
不起作用,并打开一个新选项卡或要求保存。也许这个错误需要修复。
在 Chrome 3 中,它的工作方式与 Firefox 中类似。
(已测试)
在Chrome4中,已经为浏览器保留了某些控制组合键 仅供使用,不能再被客户端 JavaScript 拦截 在网页中。
这些限制在Chrome3中不存在,并且与两者不一致 Firefox3/3.5 和 IE7/8(在 Windows 上)。
在 Chrome 4 中,它的工作方式与 Firefox 类似,除了一些键盘组合:
CtrlN
CtrlShiftN
CtrlT
CtrlShiftT
CtrlW
CtrlShiftW
这些组合无法被 Javascript 捕获,但是嵌入插件可以捕获这些组合。例如,如果您聚焦于 Youtube 视频并按 CtrlT,浏览器将不会打开新选项卡。
它的工作方式与 Firefox 或 Chrome3 类似。
(已测试)
IE9 又是害群之马,因为它不允许 javascript 捕获任何 Ctrl? 键盘事件。我测试了许多键盘组合(R、T、P、S、N、T),但都不起作用。此外,嵌入应用程序无法捕获该事件。使用 YouTube 视频进行测试。
截至 2012 年 3 月 20 日,Chrome 已修复,允许 Web 应用程序在 js keydown 事件中处理 Chrome 中的 Control+NWT(因此它可以在纯 javascript 或任何类似 jQuery 的库中工作)。
如果 Chrome 在应用程序模式下打开,此修复允许 javascript 处理此组合键,可以通过以下方式完成:
修复记录在此处:
扩展其他答案:
阻止 Chrome/Chromium 中某些组合的代码在这里定义,我总结一下,F11退出全屏模式,并且阻止所有操作和导航选项卡或窗口:
[Shift]Ctrl(Q|N|W|T|Tab ↹)
不要捕获 Ctrl+W 热键,检测窗口何时关闭可能是一个有效的选项:
“当窗口、文档及其资源即将被卸载时,会触发 beforeunload 事件。
当将非空字符串分配给 returnValue 事件属性时,会出现一个对话框,要求用户确认是否离开页面(请参见下面的示例)。当未提供任何值时,事件将以静默方式处理。”
答案非常简单:如果没有 JavaScript 中的一些技巧,这是不可能直接实现的。
这取决于浏览器。大多数浏览器都会捕获此快捷方式并将其用于自己的事件。 (例如打开新选项卡)快捷方式永远不会到达 JavaScript 引擎。
然而,用闪光灯捕捉捷径是很容易的。但这距离用户友好的网站还很远。
更新:
这是一个简短的例子。大多数浏览器都会在按下 Ctrl+y 时显示警报。 (y = 89)
document.onkeydown = keyDownEvent;
document.onkeyup = keyUpEvent;
var isCtrl = false;
function keyDownEvent() {
var keyid = event.keyCode;
if(keyid == 17) {
isCtrl = true;
}
}
function keyUpEvent() {
var keyid = event.keyCode;
if(keyid == 17) {
isCtrl = false;
}
if(keyid == 89 && isCtrl == true) {
alert('CTRL-Y pressed');
}
}
如果将 84 替换为 89(代表 t),则不会发生任何事情。你可以在 jsfiddle.net 上尝试一下。