我在一个项目中接到一个新的需求,我们必须阻止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/