1. 简介
[UIEvents-Code] 规范定义了一组可在 code
属性中使用的有效值集合。
本文档总结了 code
属性及其值的当前实现状态。
测试了每个用户代理的以下版本:
-
Google Chrome 60.0.3112.113 (Windows 10, OS X 10.12.2, Ubuntu)
-
Mozilla Firefox 55.0 (Windows 10, OS X 10.12.2, Ubuntu)
-
Microsoft Edge 83.0.478.58 (Windows 10)
-
Apple Safari 13.1.1 (OS X 10.14.6)
2. 测试方法
由于没有自动的方法来测试这些按键事件(特别是考虑到通常需要国际键盘), 这些测试都是手动进行的。
手动测试是通过访问 domeeventviewer.com/key-event-viewer.html 测试页面并在按下测试键后检查"code"列来执行的。 要测试仅存在于特定地区键盘上的键(如"IntlBackslash"), 需要使用包含被测试键的键盘。
就本报告而言,Chrome、Firefox和Safari被视为独立的实现。
code
属性值,
访问本规范给出的 domeeventviewer.com/key-event-viewer.html 自己尝试测试。 3. 结果
3.1. 总结
在至少2个独立的实现中对 code
属性 通过(Pass) 的所有112个必需值进行手动测试。
候选推荐标准的校验准则因此完全满足 (The Candidate Recommendation exit criteria are therefore fulfilled)。
此外,本文档描述了60个可选值,这些可选值在支持多媒体或遗留键盘上被使用。 其中,手动测试证实其中9个在至少2个独立的实现中通过。
3.2. 原始结果
下表显示了手动测试的结果。
当按下相应的键时,标记为"通过(Pass)"的条目将生成预期值。
当按下相应的键时,标记为"失败(Fail)"的条目会生成一些预期值以外的值。 在可能的情况下,表格项会给出一个注释,提供有关失败的更多信息。
标有"?"的条目尚未经过测试,通常是因为带有该键的设备不可用 (例如,因为带有这些键的键盘在该平台上不受支持)。
标记为"N/A"的条目当前不可测试(testable), 通常是因为带有该键的设备不会生成单独的键盘事件。例如, FnLock 。
3.2.1. code
属性
code
(在[UIEvents]中定义) 存在于所有测试的浏览器中。
KeyboardEvent 属性
| Windows | macOS | Linux | 注释 | |||||
---|---|---|---|---|---|---|---|---|---|
Chrome | Firefox | Edge | Chrome | Firefox | Safari | Chrome | Firefox | ||
code
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 |
操作系统 | 测试浏览器 | 测试浏览器 | 测试浏览器 |
---|---|---|---|
Windows , 微软公司发布的操作系统 | Chrome , 称为谷歌浏览器 | Firefox , 称为火狐浏览器 | Edge 微软发布的浏览,暂无官方中文名称 |
macOS , 苹果公司发布的操作系统 | Chrome , 称为谷歌浏览器 | Firefox , 称为火狐浏览器 | Safari 苹果发布的浏览,暂无官方中文名称 |
Linux , 社区开源的操作系统 | Chrome , 称为谷歌浏览器 | Firefox , 称为火狐浏览器 | - |
3.2.2. 必需的 code
值
本节列出了符合规范的实现必须支持的基本 code
属性值集的测试结果。
code 属性值 | Windows | macOS | Linux | 注释 | |||||
---|---|---|---|---|---|---|---|---|---|
Chrome | Firefox | Edge | Chrome | Firefox | Safari | Chrome | Firefox | ||
字母数字区域 - 书写系统键 | |||||||||
"Backquote"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Backslash"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"BracketLeft"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"BracketRight"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Comma"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit0"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit1"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit2"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit3"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit4"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit5"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit6"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit7"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit8"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Digit9"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Equal"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"IntlBackslash"
| 通过 | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 | 通过 | Safari 在支持 IntlBackslash 的键盘上用 Backquote 替换 IntlBacklash |
"IntlRo"
| 通过 | 通过 | 通过 | ? | ? | ? | ? | ? | |
"IntlYen"
| 通过 | 通过 | 通过 | ? | ? | ? | ? | ? | |
"KeyA"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyB"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyC"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyD"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyE"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyF"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyG"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyH"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyI"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyJ"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyK"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyL"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyM"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyN"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyO"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyP"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyQ"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyR"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyS"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyT"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyU"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyV"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyW"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyX"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyY"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"KeyZ"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Minus"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Period"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Quote"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Semicolon"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Slash"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
字母数字区域 - 功能按键(Functional Keys) | |||||||||
"AltLeft"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"AltRight"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Backspace"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"CapsLock"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ContextMenu"
| 通过 | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 | 通过 | Safari 返回 "Unidentified" |
"ControlLeft"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ControlRight"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Enter"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"MetaLeft"
| 通过 | 失败 | 通过 | 通过 | 失败 | 通过 | 通过 | 失败 | Firefox 返回 "OSLeft" |
"MetaRight"
| 通过 | 失败 | 通过 | 通过 | 失败 | 通过 | 通过 | 失败 | Firefox 返回 "OSRight" |
"ShiftLeft"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ShiftRight"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Space"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Tab"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Convert"
| 通过 | 通过 | 通过 | ? | ? | ? | ? | ? | |
"KanaMode"
| 通过 | 通过 | 通过 | ? | ? | ? | ? | ? | |
"NonConvert"
| 通过 | 通过 | 通过 | ? | ? | ? | ? | ? | |
控制板区域 | |||||||||
"Delete"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"End"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Home"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Insert"
| 通过 | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 | 通过 | Safari 返回 "Help" |
"PageDown"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"PageUp"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
箭头板区域 | |||||||||
"ArrowDown"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ArrowLeft"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ArrowRight"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"ArrowUp"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
数字板区域 | |||||||||
"NumLock"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad0"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad1"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad2"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad3"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad4"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad5"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad6"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad7"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad8"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"Numpad9"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadAdd"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadDecimal"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadDivide"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadEnter"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadMultiply"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"NumpadSubtract"
| 通过 | ? | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
功能区域 | |||||||||
"Escape"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F1"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F2"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F3"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F4"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F5"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F6"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F7"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F8"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F9"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F10"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | |
"F11"
| 通过 | 通过 | 通过 | 通过 | ? | ? | 通过 | ? | macOS & Ubuntu 进入全屏; Chrome 需要 KeyboardLock |
"F12"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | ? | ? | |
"PrintScreen"
| 通过 | 通过 | 通过 | 失败 | 失败 | 失败 | ? | ? | macOS 返回 "F13"; Ubuntu 会截屏 |
"ScrollLock"
| 通过 | 通过 | 通过 | ? | ? | ? | 通过 | 通过 | macOS 降低(屏幕)亮度 |
"Pause"
| 通过 | 通过 | 通过 | ? | ? | ? | 通过 | 通过 | macOS 增加(屏幕)亮度 |
特殊值 | |||||||||
"Unidentified"
| 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 | 通过 |
3.2.3. 可选的 code
值
本节列出了符合规范的实现通过使用支持特殊按键的键盘(如多媒体或传统键盘)的 code
属性值集的测试结果。
code 属性值 | Windows | macOS | Linux | 注释 | |||||
---|---|---|---|---|---|---|---|---|---|
Chrome | Firefox | Edge | Chrome | Firefox | Safari | Chrome | Firefox | ||
多媒体按键 | |||||||||
"BrowserBack"
| 通过 | 通过 | 通过 | 失败 | 失败 | 失败 | 通过 | ? | 由操作系统处理 (Chrome 需要 KeyboardLock) |
"BrowserFavorites"
| 通过 | 通过 | 通过 | 失败 | 失败 | 失败 | 通过 | ? | 由操作系统处理 (Chrome 需要 KeyboardLock) |
"BrowserForward"
| 通过 | 通过 | 通过 | 失败 | 失败 | 失败 | 通过 | ? | 由操作系统处理 (Chrome 需要 KeyboardLock) |
"BrowserHome"
| 通过 | ? | 通过 | 失败 | 失败 | 失败 | 通过 | ? | 由操作系统处理 (Chrome 需要 KeyboardLock) |
"BrowserRefresh"
| ? | ? | 失败 | ? | ? | ? | ? | ? | |
"BrowserSearch"
| 失败 | ? | 失败 | 失败 | 失败 | 失败 | 失败 | 失败 | |
"BrowserStop"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Eject"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"LaunchApp1"
| ? | ? | ? | 失败 | 失败 | 失败 | ? | ? | |
"LaunchApp2"
| ? | ? | ? | 失败 | 失败 | 失败 | ? | ? | |
"LaunchMail"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 由操作系统处理 |
"MediaPlayPause"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 由操作系统处理 |
"MediaSelect"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"MediaStop"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"MediaTrackNext"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"MediaTrackPrevious"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Power"
| ? | ? | ? | 失败 | ? | ? | ? | ? | |
"Sleep"
| ? | ? | ? | 失败 | ? | ? | ? | ? | |
"AudioVolumeDown"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 由操作系统处理 |
"AudioVolumeMute"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 由操作系统处理 |
"AudioVolumeUp"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 由操作系统处理 |
"WakeUp"
| ? | ? | ? | 失败 | ? | ? | ? | ? | |
字母数字区域 - 功能键(Functional Keys) | |||||||||
"Lang1"
| ? | ? | ? | 失败 | 通过 | 失败 | 通过 | 通过 | Safari 返回 KanaMode |
"Lang2"
| ? | ? | ? | 失败 | 通过 | 通过 | 通过 | 通过 | |
"Lang3"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Lang4"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Lang5"
| ? | ? | ? | ? | ? | ? | ? | ? | |
数字板区域 | |||||||||
"NumpadBackspace"
| 失败 | 失败 | 失败 | 失败 | ? | ? | 失败 | 失败 | Chrome/Firefox/Safari 返回 "Backspace" |
"NumpadClear"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadClearEntry"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadComma"
| ? | ? | ? | ? | ? | ? | ? | ? | 需要使用巴西键盘进行测试。 |
"NumpadEqual"
| 通过 | ? | 通过 | 通过 | ? | ? | 通过 | 通过 | |
"NumpadHash"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadMemoryAdd"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadMemoryClear"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadMemoryRecall"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadMemoryStore"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadMemorySubtract"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"NumpadParenLeft"
| 通过 | ? | ? | 失败 | ? | ? | 通过 | 通过 | |
"NumpadParenRight"
| 通过 | ? | ? | 失败 | ? | ? | 通过 | 通过 | |
"NumpadStar"
| ? | ? | ? | ? | ? | ? | ? | ? | |
功能区域 | |||||||||
"Fn"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | |
"FnLock"
| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | |
遗留的、非标准的和特殊的按键 | |||||||||
"Hyper"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Super"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Turbo"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Abort"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Resume"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Suspend"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Again"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Copy"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Cut"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Find"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Open"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Paste"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Props"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Select"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Undo"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Hiragana"
| ? | ? | ? | ? | ? | ? | ? | ? | |
"Katakana"
| ? | ? | ? | ? | ? | ? | ? | ? |