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

翻译草案,

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

Abstract

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

Status of this document

1. 简介

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

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

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

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

2. 测试方法

由于没有自动的方法来测试这些按键事件(特别是考虑到通常需要国际键盘), 这些测试都是手动进行的。

此属性( key )有两种必需值: 未命名(Unnamed)和已命名(Name)。

手动测试是通过访问 domeeventviewer.com/key-event-viewer.html 测试页面并在按下测试键后检查"key"列来执行的。 要测试仅存在于特定地区键盘上的键(如"AltGraph"), 需要使用包含被测试键的键盘。

就本报告而言,Chrome、Firefox和Safari被视为独立的实现。

本实现报告不具备实时性,想要获取浏览器实时的 key 属性值, 访问本规范给出的 domeeventviewer.com/key-event-viewer.html 自己尝试测试。

3. 结果

3.1. 总结

在至少2个独立的实现中对 key 属性 通过(Pass) 的所有63个采样的未命名值(sampled Unnamed)和所有38个必需的命名值 (Named required values)进行了手动测试。

候选推荐标准的校验准则因此完全满足 (The Candidate Recommendation exit criteria are therefore fulfilled)

此外,本文档描述了一些可选名称值(optional Named values), 这些可选值在支持多媒体或遗留键盘上被使用。其中, 手动测试证实其中39个在至少2个独立的实现中通过。

3.2. 原始结果

下表显示了手动测试的结果。

当按下相应的键时,标记为"通过(Pass)"的条目将生成预期值。

当按下相应的键时,标记为"失败(Fail)"的条目会生成一些预期值以外的值。 在可能的情况下,表格项会给出一个注释,提供有关失败的更多信息。

标有"?"的条目尚未经过测试,通常是因为带有该键的设备不可用 (例如,因为带有这些键的键盘在该平台上不受支持)。

3.2.1. key 属性

key (在[UIEvents]中定义) 存在于所有测试的浏览器中。

KeyboardEvent 属性 Chrome Edge Firefox Safari 注释
key 通过 通过 通过 通过

3.2.2. 必需的未命名键(Required Unnamed Keys)

key 属性可以包含任何区域设置中的可以由任何键生成的任何字符 ,因此尝试枚举所有可能包含的值超出了本文档的范围。

本节提供基本类型的采样键,并确定用户代理是否大概支持这些键。

键属性值 Chrome Edge Firefox Safari 注释
"A"..."Z" 通过 通过 通过 通过
"a"..."z" 通过 通过 通过 通过
"0"..."9" 通过 通过 通过 通过
" " 通过 通过 通过 通过

3.2.3. 必需的命名键(Required Named Keys)

本节列出了与标准键盘布局生成的值相对应的命名键属性值的基本集合。

键属性值 Chrome Edge Firefox Safari 注释
"Unidentified" 通过 通过 通过 通过
修饰键
"Alt" 通过 通过 通过 通过
"AltGraph" 通过 通过 通过 ?
"CapsLock" 通过 通过 通过 通过
"Control" 通过 通过 通过 通过
"Meta" 通过 通过 通过 通过
"NumLock" 通过 通过 通过 ?
"ScrollLock" 通过 通过 通过 ?
"Shift" 通过 通过 通过 通过
空格键
"Enter" 通过 通过 通过 通过
"Tab" 通过 通过 通过 通过
导航按键
"ArrowDown" 通过 通过 通过 通过
"ArrowLeft" 通过 通过 通过 通过
"ArrowRight" 通过 通过 通过 通过
"ArrowUp" 通过 通过 通过 通过
"End" 通过 通过 通过 通过
"Home" 通过 通过 通过 通过
"PageDown" 通过 通过 通过 通过
"PageUp" 通过 通过 通过 通过
编辑键
"Backspace" 通过 通过 通过 通过
"Delete" 通过 通过 通过 通过
"Insert" 通过 通过 通过 ?
UI(用户界面)按键
"ContextMenu" 通过 通过 通过 ?
"Escape" 通过 通过 通过 通过
"Pause" 通过 通过 通过 ?
设备(Device)按键
"PrintScreen" 通过 通过 通过 ?
通用功能键
"F1" 通过 通过 通过 通过 Chrome 打开帮助页面,不发送 keyup 事件
"F2" 通过 通过 通过 通过
"F3" 通过 通过 通过 通过 Chrome/Firefox 打开查找栏。Chrome不发送 keyup 事件
"F4" 通过 通过 通过 通过
"F5" 通过 通过 通过 通过 Chrome/Firefox 刷新页面
"F6" 通过 通过 通过 通过
"F7" 通过 通过 通过 通过 Firefox 启用/禁用指针浏览模式。
"F8" 通过 通过 通过 通过
"F9" 通过 通过 通过 通过
"F10" 通过 通过 通过 通过
"F11" 通过 通过 通过 通过 Chrome 进入/离开全屏模式
"F12" 通过 通过 通过 通过 Chome/Firefox 打开/关闭调试控制台。

3.2.4. 可选的编辑命名键(Optional Editing Named Keys)

由于这些值中的一些值依赖于特定的键盘,因此不期望用户代理支持所有这些值。

键属性值 Chrome Edge Firefox Safari 注释
编辑键
"Clear" 通过 通过 通过 ?
"Copy" 失败 失败 失败 ?
"CrSel" 通过 通过 通过 ?
"Cut" 失败 失败 失败 ?
"EraseEof" 通过 通过 通过 ?
"ExSel" 通过 通过 通过 ?
"Paste" 失败 失败 失败 ?
"Redo" 失败 失败 通过 ?
"Undo" 通过 失败 通过 ?
输入法和组合(IME and Composition)键
"AllCandidates" 失败 失败 失败 ?
"Alphanumeric" 通过 失败 通过 ?
"CodeInput" 失败 失败 失败 ?
"Compose" 失败 失败 失败 ?
"Convert" 通过 通过 通过 ?
"Dead" 失败 失败 失败 ?
"FinalMode" 通过 失败 通过 ?
"GroupFirst" 失败 失败 失败 ?
"GroupLast" 失败 失败 失败 ?
"GroupNext" 失败 失败 失败 ?
"GroupPrevious" 失败 失败 失败 ?
"ModeChange" 通过 通过 通过 ?
"NextCandidate" 失败 失败 失败 ?
"NonConvert" 通过 通过 通过 ?
"PreviousCandidate" 失败 失败 失败 ?
"Process" 通过 失败 失败 ?
"SingleCandidate" 失败 失败 失败 ?
韩语键盘专用的输入法键
"HangulMode" 通过 失败 通过 ?
"HanjaMode" 通过 失败 通过 ?
"JunjaMode" 通过 通过 通过 ?
日语键盘专用的输入法键
"Eisu" 失败 失败 失败 ?
"Hankaku" 通过 失败 通过 ?
"Hiragana" 通过 失败 通过 ?
"HiraganaKatakana" 失败 失败 失败 ?
"KanaMode" 通过 通过 通过 ?
"KanjiMode" 通过 通过 通过 ?
"Katakana" 通过 失败 通过 ?
"Romaji" 通过 失败 通过 ?
"Zenkaku" 通过 失败 通过 ?
"ZenkakuHankaku" 失败 失败 失败 ?

3.2.5. 可选的设备特定的命名键(Optional Device-specific Named Keys)

本节列出了与专用键盘上的键生成的值相对应的命名键属性值,例如:

由于这些值具有设备特定的性质,预计用户代理不会支持所有这些值

键属性值 Chrome Edge Firefox Safari 注释
修饰键
"Fn" 失败 失败 失败 失败
"FnLock" 失败 失败 失败 失败
"Symbol" 失败 失败 失败 失败
"SymbolLock" 失败 失败 失败 失败
遗留修饰键
"Hyper" 失败 失败 失败 失败
"Super" 失败 失败 失败 失败
UI(用户界面)按键
"Accept" 通过 通过 通过 失败
"Again" 失败 失败 失败 失败
"Attn" 通过 通过 通过 失败
"Cancel" 通过 失败 通过 失败
"Execute" 通过 通过 通过 失败
"Find" 失败 失败 失败 失败
"Help" 通过 通过 通过 失败
"Play" 通过 通过 通过 失败
"Props" 失败 失败 失败 失败
"Select" 通过 通过 通过 失败
"ZoomIn" 失败 失败 失败 失败
"ZoomOut" 失败 失败 失败 失败
设备(Device)按键
"BrightnessDown" 失败 失败 失败 失败
"BrightnessUp" 失败 失败 失败 失败
"Eject" 失败 失败 失败 失败
"LogOff" 失败 失败 失败 失败
"Power" 失败 失败 失败 失败
"PowerOff" 失败 失败 失败 失败
"Hibernate" 失败 失败 失败 失败
"Standby" 通过 失败 通过 失败
"WakeUp" 失败 失败 失败 失败
通用功能键
"Soft1" 失败 失败 失败 失败
"Soft2" 失败 失败 失败 失败
"Soft3" 失败 失败 失败 失败
"Soft4" 失败 失败 失败 失败
多媒体按键
"ChannelDown" 失败 失败 失败 失败
"ChannelUp" 失败 失败 失败 失败
"Close" 失败 失败 通过 失败
"MailForward" 通过 失败 通过 失败
"MailReply" 通过 失败 通过 失败
"MailSend" 通过 失败 通过 失败
"MediaClose" 失败 失败 失败 失败
"MediaFastForward" 失败 失败 失败 失败
"MediaPause" 失败 失败 失败 失败
"MediaPlay" 失败 失败 失败 失败
"MediaPlayPause" 通过 失败 通过 失败
"MediaRecord" 失败 失败 失败 失败
"MediaRewind" 失败 失败 失败 失败
"MediaStop" 通过 失败 通过 失败
"MediaTrackNext" 通过 失败 通过 失败
"MediaTrackPrevious" 通过 失败 通过 失败
"New" 失败 失败 通过 失败
"Open" 通过 失败 通过 失败
"Print" 失败 失败 失败 失败 Firefox返回 PrintScreen; Chrome返回 Undefined
"Save" 失败 失败 通过 失败
"SpellCheck" 失败 失败 失败 失败
多媒体数字键盘键
"Key11" 失败 失败 失败 失败
"Key12" 失败 失败 失败 失败
音频键
"AudioBalanceLeft" 失败 失败 失败 失败
"AudioBalanceRight" 失败 失败 失败 失败
"AudioBassBoostDown" 失败 失败 失败 失败
"AudioBassBoostToggle" 失败 失败 失败 失败
"AudioBassBoostUp" 失败 失败 失败 失败
"AudioFaderFront" 失败 失败 失败 失败
"AudioFaderRear" 失败 失败 失败 失败
"AudioSurroundModeNext" 失败 失败 失败 失败
"AudioTrebleDown" 失败 失败 失败 失败
"AudioTrebleUp" 失败 失败 失败 失败
"AudioVolumeDown" 通过 失败 通过 失败
"AudioVolumeUp" 通过 失败 通过 失败
"AudioVolumeMute" 通过 失败 通过 失败
"MicrophoneToggle" 失败 失败 失败 失败
"MicrophoneVolumeDown" 失败 失败 失败 失败
"MicrophoneVolumeUp" 失败 失败 失败 失败
"MicrophoneVolumeMute" 失败 失败 失败 失败
语音键
"SpeechCorrectionList" 失败 失败 失败 失败
"SpeechInputToggle" 失败 失败 失败 失败
应用程序键
"LaunchApplication1" 失败 失败 失败 失败
"LaunchApplication2" 失败 失败 失败 失败
"LaunchCalendar" 失败 失败 失败 失败
"LaunchContacts" 失败 失败 失败 失败
"LaunchMail" 失败 失败 失败 失败
"LaunchMediaPlayer" 失败 失败 失败 失败
"LaunchMusicPlayer" 失败 失败 失败 失败
"LaunchPhone" 失败 失败 失败 失败
"LaunchScreenSaver" 失败 失败 失败 失败
"LaunchSpreadsheet" 失败 失败 失败 失败
"LaunchWebBrowser" 失败 失败 失败 失败
"LaunchWebCam" 失败 失败 失败 失败
"LaunchWordProcessor" 失败 失败 失败 失败
浏览器键
"BrowserBack" 通过 失败 通过 失败
"BrowserFavorites" 通过 失败 失败 失败 键在 Firefox 浏览器中会被处理
"BrowserForward" 通过 失败 通过 失败
"BrowserHome" 失败 失败 失败 失败
"BrowserRefresh" 失败 失败 失败 失败
"BrowserSearch" 失败 失败 失败 失败
"BrowserStop" 失败 失败 失败 失败
移动电话按键
"AppSwitch" 失败 失败 失败 失败
"Call" 失败 失败 失败 失败
"Camera" 失败 失败 失败 失败
"CameraFocus" 失败 失败 失败 失败
"EndCall" 失败 失败 失败 失败
"GoBack" 失败 失败 失败 失败
"GoHome" 失败 失败 失败 失败
"HeadsetHook" 失败 失败 失败 失败
"LastNumberRedial" 失败 失败 失败 失败
"Notification" 失败 失败 失败 失败
"MannerMode" 失败 失败 失败 失败
"VoiceDial" 失败 失败 失败 失败
电视(TV)按键
"TV" 失败 失败 失败 失败
"TV3DMode" 失败 失败 失败 失败
"TVAntennaCable" 失败 失败 失败 失败
"TVAudioDescription" 失败 失败 失败 失败
"TVAudioDescriptionMixDown" 失败 失败 失败 失败
"TVAudioDescriptionMixUp" 失败 失败 失败 失败
"TVContentsMenu" 失败 失败 失败 失败
"TVDataService" 失败 失败 失败 失败
"TVInput" 失败 失败 失败 失败
"TVInputComponent1" 失败 失败 失败 失败
"TVInputComponent2" 失败 失败 失败 失败
"TVInputComposite1" 失败 失败 失败 失败
"TVInputComposite2" 失败 失败 失败 失败
"TVInputHDMI1" 失败 失败 失败 失败
"TVInputHDMI2" 失败 失败 失败 失败
"TVInputHDMI3" 失败 失败 失败 失败
"TVInputHDMI4" 失败 失败 失败 失败
"TVInputVGA1" 失败 失败 失败 失败
"TVMediaContext" 失败 失败 失败 失败
"TVNetwork" 失败 失败 失败 失败
"TVNumberEntry" 失败 失败 失败 失败
"TVPower" 失败 失败 失败 失败
"TVRadioService" 失败 失败 失败 失败
"TVSatellite" 失败 失败 失败 失败
"TVSatelliteBS" 失败 失败 失败 失败
"TVSatelliteCS" 失败 失败 失败 失败
"TVSatelliteToggle" 失败 失败 失败 失败
"TVTerrestrialAnalog" 失败 失败 失败 失败
"TVTerrestrialDigital" 失败 失败 失败 失败
"TVTimer" 失败 失败 失败 失败
媒体控制器按键
"AVRInput" 失败 失败 失败 失败
"AVRPower" 失败 失败 失败 失败
"ColorF0Red" 失败 失败 失败 失败
"ColorF1Green" 失败 失败 失败 失败
"ColorF2Yellow" 失败 失败 失败 失败
"ColorF3Blue" 失败 失败 失败 失败
"ColorF4Grey" 失败 失败 失败 失败
"ColorF5Brown" 失败 失败 失败 失败
"ClosedCaptionToggle" 失败 失败 失败 失败
"Dimmer" 失败 失败 失败 失败
"DisplaySwap" 失败 失败 失败 失败
"DVR" 失败 失败 失败 失败
"Exit" 失败 失败 失败 失败
"FavoriteClear0" 失败 失败 失败 失败
"FavoriteClear1" 失败 失败 失败 失败
"FavoriteClear2" 失败 失败 失败 失败
"FavoriteClear3" 失败 失败 失败 失败
"FavoriteRecall0" 失败 失败 失败 失败
"FavoriteRecall1" 失败 失败 失败 失败
"FavoriteRecall2" 失败 失败 失败 失败
"FavoriteRecall3" 失败 失败 失败 失败
"FavoriteStore0" 失败 失败 失败 失败
"FavoriteStore1" 失败 失败 失败 失败
"FavoriteStore2" 失败 失败 失败 失败
"FavoriteStore3" 失败 失败 失败 失败
"Guide" 失败 失败 失败 失败
"GuideNextDay" 失败 失败 失败 失败
"GuidePreviousDay" 失败 失败 失败 失败
"Info" 失败 失败 失败 失败
"InstantReplay" 失败 失败 失败 失败
"Link" 失败 失败 失败 失败
"ListProgram" 失败 失败 失败 失败
"LiveContent" 失败 失败 失败 失败
"Lock" 失败 失败 失败 失败
"MediaApps" 失败 失败 失败 失败
"MediaAudioTrack" 失败 失败 失败 失败
"MediaLast" 失败 失败 失败 失败
"MediaSkipBackward" 失败 失败 失败 失败
"MediaSkipForward" 失败 失败 失败 失败
"MediaStepBackward" 失败 失败 失败 失败
"MediaStepForward" 失败 失败 失败 失败
"MediaTopMenu" 失败 失败 失败 失败
"NavigateIn" 失败 失败 失败 失败
"NavigateNext" 失败 失败 失败 失败
"NavigateOut" 失败 失败 失败 失败
"NavigatePrevious" 失败 失败 失败 失败
"NextFavoriteChannel" 失败 失败 失败 失败
"NextUserProfile" 失败 失败 失败 失败
"OnDemand" 失败 失败 失败 失败
"Pairing" 失败 失败 失败 失败
"PinPDown" 失败 失败 失败 失败
"PinPMove" 失败 失败 失败 失败
"PinPToggle" 失败 失败 失败 失败
"PinPUp" 失败 失败 失败 失败
"PlaySpeedDown" 失败 失败 失败 失败
"PlaySpeedReset" 失败 失败 失败 失败
"PlaySpeedUp" 失败 失败 失败 失败
"RandomToggle" 失败 失败 失败 失败
"RcLowBattery" 失败 失败 失败 失败
"RecordSpeedNext" 失败 失败 失败 失败
"RfBypass" 失败 失败 失败 失败
"ScanChannelsToggle" 失败 失败 失败 失败
"ScreenModeNext" 失败 失败 失败 失败
"Settings" 失败 失败 失败 失败
"SplitScreenToggle" 失败 失败 失败 失败
"STBInput" 失败 失败 失败 失败
"STBPower" 失败 失败 失败 失败
"Subtitle" 失败 失败 失败 失败
"Teletext" 失败 失败 失败 失败
"VideoModeNext" 失败 失败 失败 失败
"Wink" 失败 失败 失败 失败
"ZoomToggle" 失败 失败 失败 失败

4. 鸣谢

特别感谢 Masayuki Nakano (Mozilla) 收集了一些实现数据(本文档中使用了) ——特别是与 IMEs 和(输入)组成相关的数据。

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-Key]
Gary Kacmarcik; Travis Leithead. UI Events KeyboardEvent key Values. URL: https://w3c.github.io/uievents-key/