用户界面事件键盘事件 code 实现报告(UI Events KeyboardEvent code Implementation Report)

翻译草案,

More details about this document
本版本:
https://mangwu.github.io/uievents-code-cn/impl-report.html
规范反馈:
GitHub-w3c-uievents-code-issues
翻译反馈:
GitHub-mangwu-uievents-code-cn-issues
编辑者:
(Google)
(Invited Expert)
翻译者:

Abstract

本文档报告了 [UIEvents-Code] 规范的实现情况。

Status of this document

1. 简介

[UIEvents-Code] 规范定义了一组可在 code 属性中使用的有效值集合。

本文档总结了 code 属性及其值的当前实现状态。

测试了每个用户代理的以下版本:

从左到右的格式是"厂商 浏览器名称 浏览器版本 (用于测试的一个或多个操作系统及其版本)"。

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 。

下面表格中会将所有 "Pass" 翻译成 "通过" ,"Fail" 翻译成 "失败" , "N/A" 和 "?" 不变。

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" ? ? ? ? ? ? ? ?

Conformance

Document conventions

Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.

All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

Examples in this specification are introduced with the words “for example” or are set apart from the normative text with class="example", like this:

This is an example of an informative example.

Informative notes begin with the word “Note” and are set apart from the normative text with class="note", like this:

Note, this is an informative note.

Conformant Algorithms

Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and abort these steps") are to be interpreted with the meaning of the key word ("must", "should", "may", etc) used in introducing the algorithm.

Conformance requirements phrased as algorithms or specific steps can be implemented in any manner, so long as the end result is equivalent. In particular, the algorithms defined in this specification are intended to be easy to understand and are not intended to be performant. Implementers are encouraged to optimize.

Index

Terms defined by reference

References

Normative References

[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UIEvents]
Gary Kacmarcik; Travis Leithead. UI Events. URL: https://w3c.github.io/uievents/
[UIEvents-Code]
Gary Kacmarcik; Travis Leithead. UI Events KeyboardEvent code Values. URL: https://w3c.github.io/uievents-code/