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 + TCtrl + S组合键,则会在控制台上显示两条消息,浏览器不会打开选项卡,也不要求保存。

如果使用alert而不是console.logevent.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属性时,会出现一个对话框,要求用户确认离开页面(见下面的例子)。 当没有提供任何值时,事件将被静默处理。“