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它什么也不显示,并打开一个新的标签。

我想捕获这些快捷方式,并防止任何浏览器的行动。

69197 次浏览

答案非常简单: 如果没有 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 上

在 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 中,两个事件监听器都可以工作。如果按 CtrlTCtrlS键组合,您将在控制台上获得这两条消息,而且浏览器不会打开选项卡,也不会要求保存。

有趣的是,如果您使用 alert而不是 console.log,那么 event.preventDefault()就不能工作,并且会打开一个新的选项卡或请求保存。也许这个漏洞需要修复。


Chrome3

在 Chrome 3中,它的工作原理与 Firefox 类似。


Chrome4

(测试)

在 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 视频测试。


感谢 @ 酸橙为伟大的 链接

截至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 ↹ ]