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

问题描述 投票:0回答:5

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

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

我试过了,但没用:

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

当我按 T 时,它会在控制台中显示

84
,但如果我按 Ctrl+T ,它不会显示任何内容,并打开一个新选项卡。

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

jquery events browser keyboard-shortcuts
5个回答
117
投票

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


感谢@Lime提供了很棒的链接


11
投票

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

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

修复记录在此处:


10
投票

扩展其他答案:

阻止 Chrome/Chromium 中某些组合的代码在这里定义,我总结一下,F11退出全屏模式,并且阻止所有操作和导航选项卡或窗口:

[Shift]Ctrl(Q|N|W|T|Tab ↹)


2
投票

不要捕获 Ctrl+W 热键,检测窗口何时关闭可能是一个有效的选项:

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

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


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),则不会发生任何事情。你可以在 jsfiddle.net 上尝试一下

© www.soinside.com 2019 - 2024. All rights reserved.