JavaScript捕获浏览器快捷方式(ctrl + t / n / w)
是否有可能捕获这些快捷方式?
- Ctrl + N
- Ctrl + T
- Ctrl + W
我试过,但它不工作:
$(window).keydown(function(event) { console.log(event.keyCode); event.preventDefault(); });
当我按下T时,它在控制台中显示84
,但是如果按下Ctrl + T,它什么也不显示,并打开一个新的标签。
我想捕捉这些快捷方式,并防止任何浏览器的行为。
在Javascript中捕获Ctrl键盘事件
示例代码:
$(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.1testing)
在Firefox中,这两个事件监听器的作品。 如果按下Ctrl + T或Ctrl + S组合键,则会在控制台上显示两条消息,浏览器不会打开选项卡,也不要求保存。
如果使用alert
而不是console.log
, event.preventDefault()
不起作用,并打开一个新标签或要求保存,这是有利的。 也许这个bug需要修复。
Chrome3
在Chrome 3中,它就像在Firefox中一样工作。
Chrome4浏览器
(testing)
在Chrome4中,某些控制组合键已经预留给浏览器使用,不能再被网页中的客户端JavaScript拦截。
这些限制在Chrome3中不存在,并且与Firefox3 / 3.5和IE7 / 8(在Windows上)不一致。
在Chrome 4中,除了一些键盘组合外,它与Firefox相似:
-
Ctrl N
-
Ctrl Shift N
-
Ctrl T
-
Ctrl Shift T
-
Ctrl W
-
Ctrl Shift W
这些组合不能被Javascript捕获, 但是embedded插件可以捕获这些组合。 例如,如果您专注于Youtubevideo并按下Ctrl + T ,则浏览器将不会打开新的选项卡。
IE7 / 8
它在Firefox或Chrome3中工作。
IE9
(testing)
IE9又是一只黑羊,因为它不允许javascript捕获任何Ctrl ? 键盘事件。 我testing了很多键盘组合(R,T,P,S,N,T),都没有工作。 embedded应用程序也无法捕获事件。 经过Youtubevideotesting。
感谢@Lime的伟大的链接 。
截至2012年3月20日,已有一个Chrome修复程序,允许Web应用程序在js keydown事件中处理Chrome中的Control + NWT(因此它可以在纯JavaScript或任何类似jQuery的库中使用)。
如果Chrome在“应用程序”模式下打开,则可以使用此修复程序来处理此组合键,这可以通过以下方式完成:
- 在应用程序模式下启动Google Chrome
修复logging在这里:
- 在应用程序模式下打开选项卡时,不要过滤快捷键(又名:窗口模式或popup模式)。
为了扩大其他答案:
在Chrome / Chromium中禁止某些组合的代码在这里定义 ,im摘要, F11退出全屏模式,所有操作和导航选项卡或窗口的操作都被阻止:
[ Shift ] Ctrl ( Q | N | W | T | Tab↹ )
答案很简单:如果没有一些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代替84,代表t ,什么都不会发生。 你可以在jsfiddle.net上试试 。
而不是捕获Ctrl + W热键, 检测窗口closures时可能是一个有效的选项:
“当窗口,文档及其资源即将被卸载时,beforeunload事件被触发。
当一个非空string被赋值给returnValue Event属性时,会出现一个对话框,要求用户确认离开页面(见下面的例子)。 当没有提供任何值时,事件将被静默处理。“