正如标题所示,我想知道 - 在现代浏览器中,哪些键盘快捷键不能被 javascript 阻止?这是浏览器依赖还是系统依赖?
到目前为止,我已经得到了
Ctrl+N
、Ctrl+Shift+N
、Ctrl+T
、Ctrl+Shift+T
、Ctrl+W
、Ctrl+Shift+W
,全部来自 Google Chrome。然后是带有 windows 键的标准 Windows 快捷键,如 windows 键本身、winkey+R
、winkey+S
等,还有 Ctrl+Shift+Escape
。有没有办法知道哪些键盘快捷键会导致 javascript 无法阻止的情况?
我想我的问题可以归结为:如果
event
是键盘事件,那么 event.preventDefault();
实际上会阻止什么?
编辑 让我们在这里列出一个清单:
Ctrl+N
Ctrl+Shift+N
Ctrl+T
Ctrl+Shift+N
Ctrl+W
Ctrl+Shift+W
winkey + anything?
Ctrl+Shift+Escape
Ctrl+Alt-Delete
(由 Psi 添加)Alt+F4
Escape
和 F11
(全屏)(由 zer00ne 添加)Ctrl+F4
、Ctrl+Tab
和 Ctrl+Shift+Tab
(由本杰明·彭尼添加)您需要使用事件的
capturing
阶段来处理并防止其默认行为。
但是!您无法在 safari 中覆盖 CTRL+R、CTRL+W 或 CMD 事件。
防止用户刷新页面的更好方法是 window.onbeforeunload = 函数(事件) {}
例如
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
使用您需要的内容。文档这里