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


69

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

  • Ctrl+N
  • Ctrl+T
  • Ctrl+W

我试过了,但是没有用:

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

当我按下T它时,它会显示84在控制台中,但是如果按下Ctrl+,T它什么都不会显示,并打开一个新标签。

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


1
忘记CTRL +键命令。这就是以上的JavaScript ...
森那维达斯

4
我可以覆盖Ctrl + S,Ctrl + R等。我认为只有3-4个快捷方式不能被覆盖。
GergelyFehérvári

1
如果您曾经在StackOverflow上输入问题或答案,那么您肯定会发现它可能的。您输入过Ctrl + L吗?您希望光标跳到地址栏,但是StackOverflow会捕获它,并在您的问题或答案中使用指向链接的URL。Ctrl快捷键也可以在DropBox和Google文档上捕获。本着@Juhana的评论精神,这是不幸的。(无论如何,这在Linux下都是正确的。我不知道Windows,也不知道它如何与Apple专有的修改键一起使用。)
Michael Scheper

Answers:


108

Ctrl用Java脚本捕获键盘事件

样例代码:

$(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组合,则将在控制台上同时显示两条消息,并且浏览器将不会打开选项卡,也不会要求保存。

这是intresting,如果你使用alert的不是console.logevent.preventDefault()不是的作品,并打开一个新的标签,或者要求保存。可能需要修复此错误。


铬3

在Chrome 3中,其工作方式与在Firefox中类似。


铬4

(已测试)

在Chrome4中,某些控制键组合仅保留供浏览器使用,并且不能再由网页中的客户端JavaScript拦截。
这些限制在Chrome3中不存在,并且与Firefox3 / 3.5和IE7 / 8(在Windows上)均不一致。

在Chrome 4中,它的工作方式类似于Firefox,但某些键盘组合除外:

  • CtrlN

  • CtrlShiftN

  • CtrlT

  • CtrlShiftT

  • CtrlW

  • CtrlShiftW

这些组合无法被Javascript捕获,但是嵌入插件可以捕获这些组合。例如,如果您聚焦于YouTube视频并按CtrlT,则浏览器将不会打开新标签。


IE7 / 8

它的工作方式类似于Firefox或Chrome3。


IE9

(已测试)

IE9再次成为败类,因为它不允许javascript捕获任何Ctrl?键盘事件。我测试了许多键盘组合(R,T,P,S,N,T),但都没有用。嵌入的应用程序也无法捕获事件。经过YouTube视频测试。


感谢@Lime的出色链接


3
我有IE 9.0.6,我可以赶上并取消Ctrl+[R,T,S,N]非p上)keydownup,以及两个documentwindow
Yousef Salimpour

@Yousef,你能阻止Ctrl+O吗?似乎此其他密钥不能被困在IE9中。
Alexis Wilke 2013年

@Yousef能否更新您为IE9捕获CTRL +事件所做的工作?谢谢
Muthu Raman 2014年

@MuthuRaman这是我的脚本:jsfiddle.net/pssxpgus在IE中取消是由try { event.keyCode = 0; } catch(e) {} event.cancelBubble = true; event.returnValue = false;
Yousef

1
@GergelyFehérvári@gkiko Ctrl+WCtrl+T不再工作了
Blueblazer172 '16

10

截至2012年3月20日,已有一个Chrome修复程序,允许Web应用程序在js keydown事件中处理Chrome中的Control + NWT(因此它可以在纯JavaScript或jQuery之类的任何库中使用)。

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

该修复程序记录在这里:


谢谢你 对于那些希望阻止用户使用CTRL + W的用户而言,这是唯一的选择。我需要其他选项,因为我通过浏览器界面运行管理工具,人们可能会意外关闭它们。:{{担任我职位的人员可能会说:“您真的要关闭此功能吗?” 确认框。
Vael Victus

1
@VaelVictus:对于您的特定用例,您应该能够通过window.onbeforeunload
mpen 2014年

@马克谢谢!但是,对于我来说,它似乎无法在Chrome中运行。:/只需将其放在CTRL + W上,并且在每个页面上,无论它们是“编辑”还是要保存的内容。这是我的小提琴:jsfiddle.net/2qb3j
Vael Victus 2014年

@VaelVictus:是的,我认为您无法检测到是否在整个事件中按下了Ctrl键,因为不是触发事件的按键,而是关闭窗口,它具有一组不同的属性。但是,您可以跟踪键盘状态以查看是否按下了Ctrl:jsfiddle.net/2qb3j/7尽管如果窗口没有对准焦点,onkeyup也无法正确触发...因此您可能需要摆弄一些东西。
mpen 2014年

不。触发事件的不是关闭窗口,而是按键本身。按键事件在窗口尝试关闭之前发生,因此您可以取消对此按键的默认事件处理(关闭窗口),然后执行您想做的任何事情。我有一个正在生产中的应用程序,使用3个键可以按说明正常运行。因此,不仅是理论。您是否已在应用程序模式下打开小提琴?如果不是,您的小提琴是完全没有用的。它仅在应用程序模式下工作。
JotaBe 2014年

8

扩展其他答案:

摘要,此处定义了阻止Chrome / Chromium中某些组合的代码,F11以退出全屏模式,并且所有操作和导航选项卡或窗口的操作均被阻止:

[ Shift] CtrlQ| N| W| T| Tab ↹


2

而不是捕获Ctrl+W热键,检测关闭窗口的时间可能是有效的选择:

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

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


1

答案很简单:没有javascript技巧,这是不可能直接实现的。

这取决于浏览器。通常,所有浏览器都会捕获此快捷方式并将其用于自己的事件。(例如,打开新标签页)快捷方式永远不会到达javascript引擎。

但是,用Flash捕捉快捷方式是可能的。但是,这离用户友好的网站很远。

更新:

这里是一个简短的例子。当按下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(代表a)t,则不会发生任何事情。您可以在jsfiddle.net上尝试


2
是的,有人在这里讨论过它code.google.com/p/chromium/issues/detail?id=33056
Lime
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.