无法阻止的JavaScript键盘快捷键

3
作为标题所示,我想知道 - 在现代浏览器中有哪些键盘快捷键无法被JavaScript阻止?这是取决于浏览器还是甚至是系统?
目前,我已经在Google Chrome中找到了 Ctrl + N , Ctrl + Shift + N , Ctrl + T , Ctrl + Shift + T , Ctrl + W , Ctrl + Shift + W 。然后还有带windows键的标准Windows快捷键,如Windows键本身, winkey + R , winkey + S 等,但也包括 Ctrl + Shift + Escape 。 是否有办法知道哪些键盘快捷键会导致JavaScript无法防止?
我想我的问题归结为:如果 event 是键盘事件,则 event.preventDefault(); 实际上会防止什么?
编辑 让我们在这里列出清单:
  • Ctrl + N
  • Ctrl + Shift + N
  • Ctrl + T
  • Ctrl + Shift + T
  • Ctrl + W
  • Ctrl + Shift + W
  • winkey + anything?
  • Ctrl + Shift + Escape
  • Ctrl + Alt-Delete (由Psi添加)
  • Alt + F4
  • Escape 和 F11 (全屏)(由zer00ne添加)

1
“Ctrl+Alt+Del”肯定也是无法阻止的 ^^ - Psi
确实不会,就像 alt+F4 一样,可能还有很多类似的快捷键。 - user3546284
我猜你不会找到一个完整的列表,唯一能做的就是测试它们全部。如果你找到了,就在文档中发布吧 :D - Psi
如果它既依赖于浏览器又依赖于系统,那么测试量将会非常大;肯定有更简单的方法,对吧? - user3546284
也许您可以创建一个JavaScript来捕获所有键盘事件,并使用外部脚本(例如VB脚本)向浏览器发送按键。但我不知道是否可以检测到它是否可预防。 - Psi
将F11和Esc键添加到无法阻止的事件列表中,以退出全屏。 - zer00ne
1个回答

0
你需要使用事件的 捕获 阶段来处理并防止其默认行为。
但是!你无法在Safari中覆盖CTRL+R、CTRL+W或CMD事件。
更好的方法是使用 window.onbeforeunload = function(event) {} 来防止用户刷新页面。
例如:
function preventFn(event) {
    if (event.keyCode === YOU_KEY_CODE && event.metaKey) {
        event.preventDefault();
        event.stopPropagation();
    }
}
document.addEventListener('keydown', preventFn, true); // true means use capture phase of event

例如,您可以使用高级库来管理快捷方式

热键 - 强大

堆栈快捷方式 - 小巧易用

附注:不要使用event.metaKey,而是使用您需要的内容。文档在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接