键盘按键测试
按任意键看它上报的位置、字符和键码,虚拟键盘会跟着亮。还能顺手测同时按键数和长按重复速度。
- 先把输入法切到英文。中文输入法激活时,按键会被输入法先拿走(这叫 IME 组字),网页收到的 keydown 会少一大半,甚至一个都收不到。测试前请按 Shift 或 Ctrl+Space 切到英文状态,否则会误判成键盘坏了。
- 笔记本的 Fn 组合键。很多笔记本把 F1 到 F12 的默认行为改成了调节亮度、音量。这时候按 F5 可能只是刷新失败,需要按住 Fn 再按才发出真正的 F5。测试时按不出反应,先试试 Fn 组合。
点一下这里,然后开始按键
这个区域需要保持聚焦。点空白处或者切到别的窗口后按键就收不到了,回来再点一下即可。
当前按住的键
0
还没有按下的键。
虚拟键盘
亮起来的是正在按住的键。窄屏上这个键盘可以左右滑动查看,小键盘和编辑键区在右侧。
浏览器和系统保留的键
下面这些组合键会被浏览器或操作系统提前截走,网页根本收不到,或者收到了也拦不住。所以按下去没反应是正常的,不代表键盘坏了。
| 组合键 | 为什么收不到 |
|---|---|
| F5 / Ctrl+R / Cmd+R | 刷新页面,浏览器底层处理,网页拦不住。 |
| F11 / Cmd+Ctrl+F | 切换全屏,由浏览器接管。 |
| F12 / Ctrl+Shift+I / Cmd+Opt+I | 打开开发者工具,浏览器优先。 |
| Ctrl+Shift+J / Ctrl+Shift+C | 开发者工具的控制台和元素选择器。 |
| Ctrl+W / Cmd+W | 关闭当前标签页。 |
| Ctrl+T / Cmd+T | 新建标签页。 |
| Ctrl+N / Cmd+N | 新建窗口。 |
| Ctrl+Shift+T | 恢复刚关掉的标签页。 |
| Ctrl+Shift+N / Cmd+Shift+N | 新建无痕窗口。 |
| Ctrl+L / Cmd+L | 把焦点移到地址栏。 |
| Ctrl+Tab / Ctrl+PageUp | 切换标签页。 |
| Alt+Tab / Cmd+Tab | 系统级切换应用,浏览器和网页都收不到。 |
| Alt+F4 / Cmd+Q | 关闭窗口或程序,系统处理。 |
| Win 键 / Cmd 键单击 | 调出系统开始菜单,单击会被系统吃掉(作为组合键时网页能收到)。 |
| Escape | 全屏状态下会先退出全屏,网页可以收到但不一定能拦住。 |
| Tab / Shift+Tab | 移动焦点。在输入框和链接之间跳转,会被浏览器先处理。 |
| Ctrl+Space / Cmd+Space | 系统或输入法切换,网页收不到。 |
| PrintScreen / Cmd+Shift+3、4、5 | 系统截图,网页收不到。 |
| Ctrl+Alt+Del / Cmd+Opt+Esc | 系统安全组合键,任何程序都拿不到。 |
| 媒体键(音量、播放) | 多数浏览器不会把它们派发给网页。 |
code 和 key 的区别,以及为什么这件事重要
code 是物理位置,key 是实际产出。code 描述的是「键在键盘上的哪一格」,比如 KeyY 永远指 QWERTY 布局里 Y 那一格,不管系统装的是哪国布局;key 描述的是「这一格在当前布局下产出了什么字符」。所以按同一个物理键,在英文布局下产出 y,在德文布局下会产出 z。这个页面的虚拟键盘按 code 高亮,而「实际产出」那一栏显示 key,把两者并排放在一起,它们的差异一眼就能看出来——这正是键盘布局装错时最典型的现象。
中文输入法会让一大半按键「消失」。输入法激活时,按键会先被输入法接管去做组字,浏览器收到的 keydown 会大幅减少,有些键甚至一个事件都收不到。这会让人误以为键盘坏了。所以测试前一定要按 Shift 或者 Ctrl+Space 把输入法切到英文状态。同理,笔记本上的 Fn 组合键:很多机器把 F1 到 F12 的默认行为改成了亮度、音量调节,要按出真正的 F5 得同时按住 Fn。
「同时按键数」测到的是整条链路的上限。从键盘到网页,中间隔着键盘硬件、USB 轮询、系统驱动、浏览器四层,任何一层先到上限,表现出来都一样。所以按住五个键发现某个键从列表里消失了,只能说明「这条链路在五个键时丢了键」,没法归因到具体是哪一层的限制。薄膜键盘在这个区间最容易冲突,带 N 键无冲设计的键盘会明显更好,但最终还是要看系统的脸色。
长按重复速率由系统决定,跟键盘硬件无关。按住一个键不动,先是延迟一小段时间,然后开始连续触发。这个「首次延迟」和随后的重复频率,完全来自系统设置里的「重复延迟」和「重复速度」,Windows 和 macOS 的默认值差别不小。所以你换一把键盘,这两个数字不会变;想让光标移动得更快,该调的是系统设置,不是买新键盘。
关于卡键和失焦。如果某个键按下后一直亮着不灭,说明它的 keyup 没有被收到。最常见的原因是中途弹出了系统对话框、或者切到了别的窗口,抢走了焦点。这个页面在失去焦点时会自动把所有按键状态清空,避免留下「一直按着」的假象;但如果你看到某个键反复卡住,而键盘在别的程序里正常,那就要怀疑浏览器本身在忙或者有插件在抢事件了。