有可能捕捉到这些捷径吗?
我试过了,但是没有用:
$(window).keydown(function(event) { console.log(event.keyCode); event.preventDefault(); });
当我按 T它显示 84在控制台,但如果我按 Ctrl + T它什么也不显示,并打开一个新的标签。
84
我想捕获这些快捷方式,并防止任何浏览器的行动。
答案非常简单: 如果没有 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'); } }
如果你用89代替84,它代表一个 t,什么也不会发生。你可以试试 在 jsfiddle.net 上。
$(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()就不能工作,并且会打开一个新的选项卡或请求保存。也许这个漏洞需要修复。
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 已经有了一个修复程序,允许网络应用程序在 Chrome 中处理 js keydown 事件中的 Control + NWT (所以它可以在纯 javascript 或任何类似 jQuery 的库中工作)。
这个补丁允许 javascript 处理这个组合键,如果 Chrome 是在应用程序模式下打开的,可以这样做:
这里记录了解决办法:
检测窗口何时关闭可能是一个有效的选择,而不是陷入 Ctrl + W热键:
”当窗口、文档及其资源即将卸载时,触发 before unload 事件。
当将非空字符串分配给 returValue Event 属性时,将出现一个对话框,要求用户确认离开页面(参见下面的示例)。如果没有提供任何值,则以静默方式处理事件。”
详述其他答案:
阻止 Chrome/Chromium 是在这里定义的中某些组合的代码,即时摘要,阻止 F11退出全屏模式以及所有操作和导航标签或窗口的代码被阻止:
[ 强 > Shift]Ctrl(Q|N|W|T|Tab ↹ ]