如何防止网页占用浏览器本身的快捷键?

无论是火狐还是谷歌浏览器,都支持许多快捷键。我觉得如果一个快捷键已经被浏览器自身使用,浏览器就不应当将按键事件继续传递到网页端。如果该快捷键并未被浏览器本身使用,那么才应该交给网页去处理。

网页的 JavaScript 能处理按键事件,这是一件好事,没必要完全禁用。我只是希望浏览器自身的快捷键的优先级更高,并且不再继续往网页端传递。

知乎上有一个问题:

如何彻底关闭知乎的“盲用区域”?
https://www.zhihu.com/question/606938446

该问题并非只有知乎网站才存在,百度、微博以及淘宝等都使用了所谓的“语音网站无障碍”功能,具体可以看这里:

http://a.sinaimg.cn/mintra/pic/2201111119/wza/public/instructions_zh-CN.html

只要按下 Alt+1, Alt+2 等快捷键,就会弹出「盲用区域」,非常烦人. "Alt+数字键"是 Linux 环境下的浏览器切换标签页的快捷键,真不希望按下后出现「盲用」导航条。

当然以上只是一个例子,有些网页还会占用浏览器自身的其他快捷键。甚至是「劫持」,导致浏览器自身的快捷键失效,只由网页处理按键事件。

有无简单实用的方法让网页无法感知到浏览器自身的快捷键?

是相反的需求呢。可以参考我这个脚本: GitHub - lilydjwg/userscripts: My user scripts

目前浏览器会保留某些关键快捷键(比如 Ctrl-W)但是其它的都能被覆盖。

这样基本上等于不允许网页使用快捷键——因为网页不知道是否有某个版本的某个浏览器会使用这个快捷键。

1 个赞

网页脚本的任何功能都在浏览器的控制之中,键盘事件当然也不例外。不继续将自身界面的快捷键转发到网页端,技术上应该没多大难度。在现有的源代码里修改一下,处理完按键事件后直接返回,不再往下接受执行即可。删减功能比增加功能的工作量小得多,只是我不知道在源代码的哪个地方修改。

网页确实无法获知浏览器占用了哪些快捷键,但网页的设计者应该熟悉哪些快捷键已经被浏览器自身使用,进而避开它们。就好比桌面软件的开发者应当避开操作系统的常用快捷盘,比如 Alt+F4, Ctrl+C/X/V 等等。同样地,网络软件的开发者应该避免占用常用的 TCP 端口,比如 21, 22, 23, 25, 80, 443 等等。

你说的是让浏览器捕获自己在使用的快捷键,因此网页避开常用快捷键并没有用——不常用的快捷键它还是收不到啊。

这个是由标准规范的。不是看常用不常用(很多已分配端口号已经很罕见有使用了)。