JavaScript `event.preventDefault()` 对于 Windows 中的 `alt+tab` 是无用的

标签 javascript html keypress keydown

我在一个项目中接到一个新的需求,我们必须阻止Windows的alt+tab热键来防止窗口之间的切换。

经过一番努力,我可以阻止alt,ctrl,tab,shift,ctrl+s,ctrl+c,ctrl+v 等,但我无法阻止 alt+tab,无论是 Firefox 还是 Chrome。

我在 MDN 中搜索,终于找到了这个:prevent the default action of the corresponding key down event in Chrome

所以我的猜测是alt+tab是Windows系统的热键而不是浏览器的。而event.preventDefault()只能阻止浏览器对应的事件。

谁有更详细的解释?

以下是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        document.addEventListener("keydown", function(e) {
            //tab keyCode===9
            //I hope to prevent alt+tab event action in windows
            if (e.altKey && e.keyCode === 9) {
                e.preventDefault(); //why not come in?
            }
        }, false)
    </script>
</body>
</html>

最佳答案

event.preventDefault() can only prevent the events corresponding to the browser.

更准确地说,event.preventDefault()只能阻止浏览器接收到并决定传递给网页的事件的 Action 。

Alt+Tab 完全在浏览器之外处理,由 Windows DWM .在大多数情况下,此快捷方式根本不会传递到桌面应用程序。由于 Web 浏览器不会特意捕获它,因此它们根本不会“看到”该事件。同样的原则适用于 Ctrl+Alt+Del。

某些浏览器还会“保护”某些键盘快捷键,永远不会将它们传递给网页,以便用户可以依赖这些快捷键始终保持一致的行为。例如,Chrome 将保护映射到以下命令之一的任何键盘事件:

  • 关闭选项卡(Ctrl+W)
  • 关闭窗口(Ctrl+Shift+W)
  • 新隐身窗口 (Ctrl+Shift+N)
  • 新标签页(Ctrl+T)
  • 新窗口(Ctrl+N)
  • 恢复选项卡 (Ctrl+Shift+T)
  • 选择下一个选项卡(Ctrl+Tab、Ctrl+PageDown)
  • 选择上一个选项卡(Ctrl+Shift+Tab、Ctrl+PageUp)
  • 退出(Alt+F4、Cmd+Q)

关于JavaScript `event.preventDefault()` 对于 Windows 中的 `alt+tab` 是无用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40434142/

相关文章:

javascript - 编码浏览器扩展、插件、Firefox、Safari、Chrome 等……这可能吗?

python - 如何根据 Flask 中的单选按钮值重定向?

javascript - 打印问题分页

java - JSP 中的页面编码

java - ActionListener 在某些计算机上不起作用?

javascript - "Access-Control-Allow-Origin"访问API请求错误

javascript - angularjs常量如何使用未知提供者

javascript - Charts js - 如何使网格线破折号以及如何使网格线在每个点处停止

Objective-C/ cocoa : Detect all keypresses

jquery - 按键事件在 IE 和 Chrome 中不起作用,但在 FF 中起作用