js 如何屏蔽 Chrome 的部分快捷键

讨论 未结 4 40
JCZ2MkKb5S8ZX9pq
JCZ2MkKb5S8ZX9pq 会员 2022年9月26日 15:26 发表
<p>需求是</p> <ul> <li>希望在网页上使用自定义快捷键。</li> <li>但部分希望自定义的快捷键跟 Chrome 自有快捷键冲突了,比如 Ctrl+Shfit+A 、Ctrl+ShiftG ,都会被浏览器先触发。</li> <li>如果直接在 keydown 后 preventDefault ,可以阻挡大部分的快捷键,但一些浏览器常用键也就被覆盖了,比如 Ctrl+R 刷新页面也不行了。</li> <li>但如果在判断组合键之后,再 preventDefault 也会触发 Chrome 默认快捷键(猜测是判断组合键那几微秒的延迟,就被 Chrome 截胡了)。</li> <li>Github 在任意页面输入 Ctrl+K 、Cmd+K ,都可以唤起窗口,但不影响 Chrome 其他的快捷键设置。好奇人家是怎么实现的。</li> </ul>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
4个回复
  • JCZ2MkKb5S8ZX9pq
    2022年9月26日 15:26
    包括 vue 的官方文档,也是用 Ctrl+K 触发搜索,但没影响其他 Chrome 原本的快捷键。
    0 0
  • dcsuibian
    2022年9月26日 16:28
    document.body.addEventListener('keydown', event => { if ('p' === event.key.toLowerCase() && (event.getModifierState('Meta') || event.getModifierState('Control'))) { event.preventDefault() console.log('检测到组合键') } }, false) 我是 Mac ,打印的快捷键是 command+p ,windows 上我猜应该是 ctrl+p 实测,像是打印、查找是能够拦截住的,但打开新窗口的快捷键不行 如果把'keydown'改成'keypress'也不行
    0 0
  • JCZ2MkKb5S8ZX9pq
    2022年9月26日 16:28
    好像是看有几个地方说 ctrl+N 不行,但我现在是 ctrl+shift+g 这种都不行,还在查。
    0 0