JavaScript`event.preventDefault()`对Windows中的`alt + tab`没用

Pag*_*eYe 3 html javascript keypress keydown

我在一个项目中收到了一个新要求,我们必须阻止Windows' alt+ tab热键来阻止窗口之间的切换.

很多的努力后,我可以预防alt,ctrl,tab,shift,ctrl+ s,ctrl+ c,ctrl+ v等,但我不能阻止alt+ tab,无论是Firefox或Chrome.

我在MDN中搜索并最终发现:阻止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>
Run Code Online (Sandbox Code Playgroud)

dus*_*uff 9

event.preventDefault() 只能阻止与浏览器对应的事件.

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

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)