javascript捕获浏览器快捷方式(ctrl + t / n / w)

时间:2011-09-03 19:52:26

标签: javascript events browser keyboard-shortcuts

是否可以捕获这些快捷方式?

  • Ctrl + N
  • Ctrl + T
  • 控制 + w ^

我尝试了这个,但它不起作用:

$(window).keydown(function(event) {
  console.log(event.keyCode);
  event.preventDefault();
});

当我按 T 时,它会在控制台中显示84,但是如果我按 Ctrl + T 则不显示任何内容,并打开一个新标签。

我想捕获这些快捷方式并阻止任何浏览器操作。

5 个答案:

答案 0 :(得分:95)

在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.1测试)

在Firefox中,两个事件监听器都有效。如果按 Ctrl T Ctrl S keycombinations,您将在控制台和浏览器上同时收到这两条消息不打开标签,也不要求保存。

如果您使用alert代替console.log event.preventDefault()无法正常工作,并打开新标签页或要求保存,那就太有意思了。也许这个bug需要修复。


Chrome3

在Chrome 3中,它就像在Firefox中一样。


Chrome4浏览器

<子>(测试)

  

在Chrome4中,某些控制键组合已保留给浏览器   仅限使用情况,客户端JavaScript无法再截获   在网页中   这些限制在Chrome3中不存在,并且与两者都不一致   Firefox3 / 3.5和IE7 / 8(在Windows上)。

在Chrome 4中,除了某些键盘组合外,它与Firefox类似:

  • 控制 名词

  • 控制 名词

  • 控制 Ť

  • 控制 Ť

  • 控制 w ^

  • 控制 w ^

这些组合无法通过Javascript捕获,嵌入式插件可以捕获这些组合。例如,如果您专注于Youtube视频并按 Ctrl T ,浏览器将无法打开新标签页。


IE7 / 8

就像在Firefox或Chrome3中一样。


IE9

<子>(测试)

IE9再次成为黑羊,因为它不允许javascript捕获任何 Ctrl 键盘事件。我测试了许多键盘组合(R,T,P,S,N,T)并且都没有工作。嵌入应用程序也无法捕获事件。使用Youtube视频进行测试。


感谢好@Limelink

答案 1 :(得分:10)

截至2012年3月20日,已经有一个Chrome修补程序允许网络应用程序在js keydown事件中处理Chrome中的Control + NWT(因此它适用于纯javascript或任何类似jQuery的库)。

此修复程序允许javascript在应用程序模式下打开Chrome时处理此组合键,这可以通过以下方式完成:

此处记录了修复程序:

答案 2 :(得分:8)

扩展其他答案:

阻止Chrome / Chromium is defined here,即时消息摘要, F11 中某些组合的代码,以退出全屏模式,并阻止操作和浏览标签页或窗口的所有内容:

<强> [ 控制 (适用 Q <强> | 名词 | w ^ | Ť < strong> | 标签↹

答案 3 :(得分:2)

而不是捕获 Ctrl + W 热键,detect when the window is closed可能是一个有效的选项:

“当窗口,文档及其资源即将卸载时,会触发beforeunload事件。

当为returnValue Event属性分配非空字符串时,会出现一个对话框,要求用户确认离开页面(参见下面的示例)。如果未提供任何值,则会以静默方式处理事件。“

答案 4 :(得分:1)

答案很简单:如果没有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 ,则不会发生任何事情。你可以尝试on jsfiddle.net