是否可以捕获这些快捷方式?
- Ctrl+N
- Ctrl+T
- Ctrl+W
我试过了,但是没有用:
$(window).keydown(function(event) {
console.log(event.keyCode);
event.preventDefault();
});
当我按下T它时,它会显示84
在控制台中,但是如果按下Ctrl+,T它什么都不会显示,并打开一个新标签。
我想捕获这些快捷方式并阻止任何浏览器操作。
是否可以捕获这些快捷方式?
我试过了,但是没有用:
$(window).keydown(function(event) {
console.log(event.keyCode);
event.preventDefault();
});
当我按下T它时,它会显示84
在控制台中,但是如果按下Ctrl+,T它什么都不会显示,并打开一个新标签。
我想捕获这些快捷方式并阻止任何浏览器操作。
Answers:
$(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.log
的event.preventDefault()
不是的作品,并打开一个新的标签,或者要求保存。可能需要修复此错误。
在Chrome 3中,其工作方式与在Firefox中类似。
(已测试)
在Chrome4中,某些控制键组合仅保留供浏览器使用,并且不能再由网页中的客户端JavaScript拦截。
这些限制在Chrome3中不存在,并且与Firefox3 / 3.5和IE7 / 8(在Windows上)均不一致。
在Chrome 4中,它的工作方式类似于Firefox,但某些键盘组合除外:
CtrlN
CtrlShiftN
CtrlT
CtrlShiftT
CtrlW
CtrlShiftW
这些组合无法被Javascript捕获,但是嵌入插件可以捕获这些组合。例如,如果您聚焦于YouTube视频并按CtrlT,则浏览器将不会打开新标签。
它的工作方式类似于Firefox或Chrome3。
(已测试)
IE9再次成为败类,因为它不允许javascript捕获任何Ctrl?键盘事件。我测试了许多键盘组合(R,T,P,S,N,T),但都没有用。嵌入的应用程序也无法捕获事件。经过YouTube视频测试。
Ctrl+[R,T,S,N]
(非p上)keydown
和up
,以及两个document
和window
。
Ctrl+O
吗?似乎此其他密钥不能被困在IE9中。
try { event.keyCode = 0; } catch(e) {} event.cancelBubble = true; event.returnValue = false;
Ctrl+W
,Ctrl+T
不再工作了
截至2012年3月20日,已有一个Chrome修复程序,允许Web应用程序在js keydown事件中处理Chrome中的Control + NWT(因此它可以在纯JavaScript或jQuery之类的任何库中使用)。
如果在“应用程序”模式下打开Chrome,此修复程序允许javascript处理这些按键组合,可以通过以下方式完成:
该修复程序记录在这里:
window.onbeforeunload
答案很简单:没有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上尝试。