1. Introduction
The [UIEvents-Code] specification defines the set of values that are valid for use
in the key
attribute.
This document summarizes the current implementation status of the key
attribute and its values.
The following versions of each user agents were tested:
-
Google Chrome 60.0.3112.113 (OS X 10.12.2, Windows 10, Ubuntu)
-
Microsoft Edge 40.15063.0.0 (Windows 10)
-
Mozilla Firefox 55.0 (OS X 10.12.2, Windows 10, Ubuntu) & Nightly 95 (macOS 11.6)
-
Apple Safari Version 15.0 (macOS 11.6)
2. Methodology
Because there is no automated way to test these key press events (expecially considering that international keyboard are often required), these tests were all performed manually.
There are two kinds of required values for this attribute: Unnamed and Named.
-
The Unnamed values can be any valid printable Unicode character. Since there are an extremely large number of these values, it is not practical to test every possible one. Instead, a sampling of 63 of the most common keys are tested.
-
There are 38 required Named values and they are all manually tested.
Manual tests were performed by visiting the domeeventviewer.com/key-event-viewer.html test page and examining the "key" column after pressing the key being tested. To test keys (like "AltGraph") that are only present on keyboards for certain locales, this requires using a keyboard from a locale that contains the key being tested.
For purposes of this report, Chrome, Firefox and Safari are considered independent implementations.
3. Results
3.1. Summary
Manual tests for all 63 of the sampled Unnamed and all 38 of the Named required values
of the key
attribute Pass in at least 2 independent
implementations.
The Candidate Recommendation exit criteria are therefore fulfilled.
In addition, the specification describes a number of optional Named values that may be used to support multimedia or legacy keyboards. Of these, manual tests confirm that 39 of these Pass in at least 2 independent implementations.
3.2. Raw Results
The following tables present the result of the manual tests.
Entries marked "Pass" generate the expected value when the corresponding key is pressed.
Entries marked "Fail" generate some value other than the expected value when the corresponding key is pressed. Wherever possible, a Note is included that provides more information about the failure.
Entries marked with a "?" have not been tested, typically because devices with that key were not available (for example, because keyboards with those keys are not supported on that platform).
3.2.1. The key
Attribute
The key
attribute (defined in [UIEvents]) is present in all
browsers tested.
KeyboardEvent attribute
| Chrome | Edge | Firefox | Safari | Notes |
---|---|---|---|---|---|
key
| Pass | Pass | Pass | Pass |
3.2.2. Required Unnamed Keys
The key
attribute can contain any character that can be
produced by any key in any locale, so it is beyond the scope of this document
to attempt to enumerate all possible values that can be contained.
This section provides a basic sampling of key types and identifies if those keys are generally supported by the user agent.
key attribute value | Chrome | Edge | Firefox | Safari | Notes |
---|---|---|---|---|---|
"A" ..."Z"
| Pass | Pass | Pass | Pass | |
"a" ..."z"
| Pass | Pass | Pass | Pass | |
"0" ..."9"
| Pass | Pass | Pass | Pass | |
" "
| Pass | Pass | Pass | Pass |
3.2.3. Required Named Keys
This section lists the basic set of named key attributes that corresponds to values generated by a standard keyboard layout.
key attribute value | Chrome | Edge | Firefox | Safari | Notes |
---|---|---|---|---|---|
"Unidentified"
| Pass | Pass | Pass | Pass | |
Modifier Keys | |||||
"Alt"
| Pass | Pass | Pass | Pass | |
"AltGraph"
| Pass | Pass | Pass | ? | |
"CapsLock"
| Pass | Pass | Pass | Pass | |
"Control"
| Pass | Pass | Pass | Pass | |
"Meta"
| Pass | Pass | Pass | Pass | |
"NumLock"
| Pass | Pass | Pass | ? | |
"ScrollLock"
| Pass | Pass | Pass | ? | |
"Shift"
| Pass | Pass | Pass | Pass | |
Whitespace Keys | |||||
"Enter"
| Pass | Pass | Pass | Pass | |
"Tab"
| Pass | Pass | Pass | Pass | |
Navigation Keys | |||||
"ArrowDown"
| Pass | Pass | Pass | Pass | |
"ArrowLeft"
| Pass | Pass | Pass | Pass | |
"ArrowRight"
| Pass | Pass | Pass | Pass | |
"ArrowUp"
| Pass | Pass | Pass | Pass | |
"End"
| Pass | Pass | Pass | Pass | |
"Home"
| Pass | Pass | Pass | Pass | |
"PageDown"
| Pass | Pass | Pass | Pass | |
"PageUp"
| Pass | Pass | Pass | Pass | |
Editing Keys | |||||
"Backspace"
| Pass | Pass | Pass | Pass | |
"Delete"
| Pass | Pass | Pass | Pass | |
"Insert"
| Pass | Pass | Pass | ? | |
UI Keys | |||||
"ContextMenu"
| Pass | Pass | Pass | ? | |
"Escape"
| Pass | Pass | Pass | Pass | |
"Pause"
| Pass | Pass | Pass | ? | |
Device Keys | |||||
"PrintScreen"
| Pass | Pass | Pass | ? | |
General-Purpose Function Keys | |||||
"F1"
| Pass | Pass | Pass | Pass | Chrome opens help page and doesn’t send keyup event |
"F2"
| Pass | Pass | Pass | Pass | |
"F3"
| Pass | Pass | Pass | Pass | Chrome/Firefox open Find bar. Chrome doesn’t send keyup event |
"F4"
| Pass | Pass | Pass | Pass | |
"F5"
| Pass | Pass | Pass | Pass | Chrome/Firefox refresh page |
"F6"
| Pass | Pass | Pass | Pass | |
"F7"
| Pass | Pass | Pass | Pass | Firefox enables/disables Caret Browsing. |
"F8"
| Pass | Pass | Pass | Pass | |
"F9"
| Pass | Pass | Pass | Pass | |
"F10"
| Pass | Pass | Pass | Pass | |
"F11"
| Pass | Pass | Pass | Pass | Chrome enters/leaves fullscreen |
"F12"
| Pass | Pass | Pass | Pass | Chome/Firefox open/close debug console. |
3.2.4. Optional Editing Named Keys
Since some of these values are dependent on specific keyboards, user agents are not not expected to support all of these values.
key attribute value | Chrome | Edge | Firefox | Safari | Notes |
---|---|---|---|---|---|
Editing Keys | |||||
"Clear"
| Pass | Pass | Pass | ? | |
"Copy"
| Fail | Fail | Fail | ? | |
"CrSel"
| Pass | Pass | Pass | ? | |
"Cut"
| Fail | Fail | Fail | ? | |
"EraseEof"
| Pass | Pass | Pass | ? | |
"ExSel"
| Pass | Pass | Pass | ? | |
"Paste"
| Fail | Fail | Fail | ? | |
"Redo"
| Fail | Fail | Pass | ? | |
"Undo"
| Pass | Fail | Pass | ? | |
IME and Composition Keys | |||||
"AllCandidates"
| Fail | Fail | Fail | ? | |
"Alphanumeric"
| Pass | Fail | Pass | ? | |
"CodeInput"
| Fail | Fail | Fail | ? | |
"Compose"
| Fail | Fail | Fail | ? | |
"Convert"
| Pass | Pass | Pass | ? | |
"Dead"
| Fail | Fail | Fail | ? | |
"FinalMode"
| Pass | Fail | Pass | ? | |
"GroupFirst"
| Fail | Fail | Fail | ? | |
"GroupLast"
| Fail | Fail | Fail | ? | |
"GroupNext"
| Fail | Fail | Fail | ? | |
"GroupPrevious"
| Fail | Fail | Fail | ? | |
"ModeChange"
| Pass | Pass | Pass | ? | |
"NextCandidate"
| Fail | Fail | Fail | ? | |
"NonConvert"
| Pass | Pass | Pass | ? | |
"PreviousCandidate"
| Fail | Fail | Fail | ? | |
"Process"
| Pass | Fail | Fail | ? | |
"SingleCandidate"
| Fail | Fail | Fail | ? | |
IME keys specific to Korean keyboards | |||||
"HangulMode"
| Pass | Fail | Pass | ? | |
"HanjaMode"
| Pass | Fail | Pass | ? | |
"JunjaMode"
| Pass | Pass | Pass | ? | |
IME keys specific to Japanese keyboards | |||||
"Eisu"
| Fail | Fail | Fail | ? | |
"Hankaku"
| Pass | Fail | Pass | ? | |
"Hiragana"
| Pass | Fail | Pass | ? | |
"HiraganaKatakana"
| Fail | Fail | Fail | ? | |
"KanaMode"
| Pass | Pass | Pass | ? | |
"KanjiMode"
| Pass | Pass | Pass | ? | |
"Katakana"
| Pass | Fail | Pass | ? | |
"Romaji"
| Pass | Fail | Pass | ? | |
"Zenkaku"
| Pass | Fail | Pass | ? | |
"ZenkakuHankaku"
| Fail | Fail | Fail | ? |
3.2.5. Optional Device-specific Named Keys
This sections lists named key attributes that correspond to values generated by keys found on specialized keyboards, for example:
-
Multimedia keyboards
-
Keyboard with special IME support
-
Remote control devices
Because of the device-specific nature of these values, it is not expected that user agents will support all of these values
key attribute value | Chrome | Edge | Firefox | Safari | Notes |
---|---|---|---|---|---|
Modifier Keys | |||||
"Fn"
| Fail | Fail | Fail | Fail | |
"FnLock"
| Fail | Fail | Fail | Fail | |
"Symbol"
| Fail | Fail | Fail | Fail | |
"SymbolLock"
| Fail | Fail | Fail | Fail | |
Legacy modifier keys | |||||
"Hyper"
| Fail | Fail | Fail | Fail | |
"Super"
| Fail | Fail | Fail | Fail | |
UI Keys | |||||
"Accept"
| Pass | Pass | Pass | Fail | |
"Again"
| Fail | Fail | Fail | Fail | |
"Attn"
| Pass | Pass | Pass | Fail | |
"Cancel"
| Pass | Fail | Pass | Fail | |
"Execute"
| Pass | Pass | Pass | Fail | |
"Find"
| Fail | Fail | Fail | Fail | |
"Help"
| Pass | Pass | Pass | Fail | |
"Play"
| Pass | Pass | Pass | Fail | |
"Props"
| Fail | Fail | Fail | Fail | |
"Select"
| Pass | Pass | Pass | Fail | |
"ZoomIn"
| Fail | Fail | Fail | Fail | |
"ZoomOut"
| Fail | Fail | Fail | Fail | |
Device Keys | |||||
"BrightnessDown"
| Fail | Fail | Fail | Fail | |
"BrightnessUp"
| Fail | Fail | Fail | Fail | |
"Eject"
| Fail | Fail | Fail | Fail | |
"LogOff"
| Fail | Fail | Fail | Fail | |
"Power"
| Fail | Fail | Fail | Fail | |
"PowerOff"
| Fail | Fail | Fail | Fail | |
"Hibernate"
| Fail | Fail | Fail | Fail | |
"Standby"
| Pass | Fail | Pass | Fail | |
"WakeUp"
| Fail | Fail | Fail | Fail | |
General-Purpose Function Keys | |||||
"Soft1"
| Fail | Fail | Fail | Fail | |
"Soft2"
| Fail | Fail | Fail | Fail | |
"Soft3"
| Fail | Fail | Fail | Fail | |
"Soft4"
| Fail | Fail | Fail | Fail | |
Multimedia Keys | |||||
"ChannelDown"
| Fail | Fail | Fail | Fail | |
"ChannelUp"
| Fail | Fail | Fail | Fail | |
"Close"
| Fail | Fail | Pass | Fail | |
"MailForward"
| Pass | Fail | Pass | Fail | |
"MailReply"
| Pass | Fail | Pass | Fail | |
"MailSend"
| Pass | Fail | Pass | Fail | |
"MediaClose"
| Fail | Fail | Fail | Fail | |
"MediaFastForward"
| Fail | Fail | Fail | Fail | |
"MediaPause"
| Fail | Fail | Fail | Fail | |
"MediaPlay"
| Fail | Fail | Fail | Fail | |
"MediaPlayPause"
| Pass | Fail | Pass | Fail | |
"MediaRecord"
| Fail | Fail | Fail | Fail | |
"MediaRewind"
| Fail | Fail | Fail | Fail | |
"MediaStop"
| Pass | Fail | Pass | Fail | |
"MediaTrackNext"
| Pass | Fail | Pass | Fail | |
"MediaTrackPrevious"
| Pass | Fail | Pass | Fail | |
"New"
| Fail | Fail | Pass | Fail | |
"Open"
| Pass | Fail | Pass | Fail | |
"Print"
| Fail | Fail | Fail | Fail | Firefox returns PrintScreen; Chrome returns Undefined |
"Save"
| Fail | Fail | Pass | Fail | |
"SpellCheck"
| Fail | Fail | Fail | Fail | |
Multimedia Numpad Keys | |||||
"Key11"
| Fail | Fail | Fail | Fail | |
"Key12"
| Fail | Fail | Fail | Fail | |
Audio Keys | |||||
"AudioBalanceLeft"
| Fail | Fail | Fail | Fail | |
"AudioBalanceRight"
| Fail | Fail | Fail | Fail | |
"AudioBassBoostDown"
| Fail | Fail | Fail | Fail | |
"AudioBassBoostToggle"
| Fail | Fail | Fail | Fail | |
"AudioBassBoostUp"
| Fail | Fail | Fail | Fail | |
"AudioFaderFront"
| Fail | Fail | Fail | Fail | |
"AudioFaderRear"
| Fail | Fail | Fail | Fail | |
"AudioSurroundModeNext"
| Fail | Fail | Fail | Fail | |
"AudioTrebleDown"
| Fail | Fail | Fail | Fail | |
"AudioTrebleUp"
| Fail | Fail | Fail | Fail | |
"AudioVolumeDown"
| Pass | Fail | Pass | Fail | |
"AudioVolumeUp"
| Pass | Fail | Pass | Fail | |
"AudioVolumeMute"
| Pass | Fail | Pass | Fail | |
"MicrophoneToggle"
| Fail | Fail | Fail | Fail | |
"MicrophoneVolumeDown"
| Fail | Fail | Fail | Fail | |
"MicrophoneVolumeUp"
| Fail | Fail | Fail | Fail | |
"MicrophoneVolumeMute"
| Fail | Fail | Fail | Fail | |
Speech Keys | |||||
"SpeechCorrectionList"
| Fail | Fail | Fail | Fail | |
"SpeechInputToggle"
| Fail | Fail | Fail | Fail | |
Application Keys | |||||
"LaunchApplication1"
| Fail | Fail | Fail | Fail | |
"LaunchApplication2"
| Fail | Fail | Fail | Fail | |
"LaunchCalendar"
| Fail | Fail | Fail | Fail | |
"LaunchContacts"
| Fail | Fail | Fail | Fail | |
"LaunchMail"
| Fail | Fail | Fail | Fail | |
"LaunchMediaPlayer"
| Fail | Fail | Fail | Fail | |
"LaunchMusicPlayer"
| Fail | Fail | Fail | Fail | |
"LaunchPhone"
| Fail | Fail | Fail | Fail | |
"LaunchScreenSaver"
| Fail | Fail | Fail | Fail | |
"LaunchSpreadsheet"
| Fail | Fail | Fail | Fail | |
"LaunchWebBrowser"
| Fail | Fail | Fail | Fail | |
"LaunchWebCam"
| Fail | Fail | Fail | Fail | |
"LaunchWordProcessor"
| Fail | Fail | Fail | Fail | |
Browser Keys | |||||
"BrowserBack"
| Pass | Fail | Pass | Fail | |
"BrowserFavorites"
| Pass | Fail | Fail | Fail | Key handled by browser in Firefox |
"BrowserForward"
| Pass | Fail | Pass | Fail | |
"BrowserHome"
| Fail | Fail | Fail | Fail | |
"BrowserRefresh"
| Fail | Fail | Fail | Fail | |
"BrowserSearch"
| Fail | Fail | Fail | Fail | |
"BrowserStop"
| Fail | Fail | Fail | Fail | |
Mobile Phone Keys | |||||
"AppSwitch"
| Fail | Fail | Fail | Fail | |
"Call"
| Fail | Fail | Fail | Fail | |
"Camera"
| Fail | Fail | Fail | Fail | |
"CameraFocus"
| Fail | Fail | Fail | Fail | |
"EndCall"
| Fail | Fail | Fail | Fail | |
"GoBack"
| Fail | Fail | Fail | Fail | |
"GoHome"
| Fail | Fail | Fail | Fail | |
"HeadsetHook"
| Fail | Fail | Fail | Fail | |
"LastNumberRedial"
| Fail | Fail | Fail | Fail | |
"Notification"
| Fail | Fail | Fail | Fail | |
"MannerMode"
| Fail | Fail | Fail | Fail | |
"VoiceDial"
| Fail | Fail | Fail | Fail | |
TV Keys | |||||
"TV"
| Fail | Fail | Fail | Fail | |
"TV3DMode"
| Fail | Fail | Fail | Fail | |
"TVAntennaCable"
| Fail | Fail | Fail | Fail | |
"TVAudioDescription"
| Fail | Fail | Fail | Fail | |
"TVAudioDescriptionMixDown"
| Fail | Fail | Fail | Fail | |
"TVAudioDescriptionMixUp"
| Fail | Fail | Fail | Fail | |
"TVContentsMenu"
| Fail | Fail | Fail | Fail | |
"TVDataService"
| Fail | Fail | Fail | Fail | |
"TVInput"
| Fail | Fail | Fail | Fail | |
"TVInputComponent1"
| Fail | Fail | Fail | Fail | |
"TVInputComponent2"
| Fail | Fail | Fail | Fail | |
"TVInputComposite1"
| Fail | Fail | Fail | Fail | |
"TVInputComposite2"
| Fail | Fail | Fail | Fail | |
"TVInputHDMI1"
| Fail | Fail | Fail | Fail | |
"TVInputHDMI2"
| Fail | Fail | Fail | Fail | |
"TVInputHDMI3"
| Fail | Fail | Fail | Fail | |
"TVInputHDMI4"
| Fail | Fail | Fail | Fail | |
"TVInputVGA1"
| Fail | Fail | Fail | Fail | |
"TVMediaContext"
| Fail | Fail | Fail | Fail | |
"TVNetwork"
| Fail | Fail | Fail | Fail | |
"TVNumberEntry"
| Fail | Fail | Fail | Fail | |
"TVPower"
| Fail | Fail | Fail | Fail | |
"TVRadioService"
| Fail | Fail | Fail | Fail | |
"TVSatellite"
| Fail | Fail | Fail | Fail | |
"TVSatelliteBS"
| Fail | Fail | Fail | Fail | |
"TVSatelliteCS"
| Fail | Fail | Fail | Fail | |
"TVSatelliteToggle"
| Fail | Fail | Fail | Fail | |
"TVTerrestrialAnalog"
| Fail | Fail | Fail | Fail | |
"TVTerrestrialDigital"
| Fail | Fail | Fail | Fail | |
"TVTimer"
| Fail | Fail | Fail | Fail | |
Media Controller Keys | |||||
"AVRInput"
| Fail | Fail | Fail | Fail | |
"AVRPower"
| Fail | Fail | Fail | Fail | |
"ColorF0Red"
| Fail | Fail | Fail | Fail | |
"ColorF1Green"
| Fail | Fail | Fail | Fail | |
"ColorF2Yellow"
| Fail | Fail | Fail | Fail | |
"ColorF3Blue"
| Fail | Fail | Fail | Fail | |
"ColorF4Grey"
| Fail | Fail | Fail | Fail | |
"ColorF5Brown"
| Fail | Fail | Fail | Fail | |
"ClosedCaptionToggle"
| Fail | Fail | Fail | Fail | |
"Dimmer"
| Fail | Fail | Fail | Fail | |
"DisplaySwap"
| Fail | Fail | Fail | Fail | |
"DVR"
| Fail | Fail | Fail | Fail | |
"Exit"
| Fail | Fail | Fail | Fail | |
"FavoriteClear0"
| Fail | Fail | Fail | Fail | |
"FavoriteClear1"
| Fail | Fail | Fail | Fail | |
"FavoriteClear2"
| Fail | Fail | Fail | Fail | |
"FavoriteClear3"
| Fail | Fail | Fail | Fail | |
"FavoriteRecall0"
| Fail | Fail | Fail | Fail | |
"FavoriteRecall1"
| Fail | Fail | Fail | Fail | |
"FavoriteRecall2"
| Fail | Fail | Fail | Fail | |
"FavoriteRecall3"
| Fail | Fail | Fail | Fail | |
"FavoriteStore0"
| Fail | Fail | Fail | Fail | |
"FavoriteStore1"
| Fail | Fail | Fail | Fail | |
"FavoriteStore2"
| Fail | Fail | Fail | Fail | |
"FavoriteStore3"
| Fail | Fail | Fail | Fail | |
"Guide"
| Fail | Fail | Fail | Fail | |
"GuideNextDay"
| Fail | Fail | Fail | Fail | |
"GuidePreviousDay"
| Fail | Fail | Fail | Fail | |
"Info"
| Fail | Fail | Fail | Fail | |
"InstantReplay"
| Fail | Fail | Fail | Fail | |
"Link"
| Fail | Fail | Fail | Fail | |
"ListProgram"
| Fail | Fail | Fail | Fail | |
"LiveContent"
| Fail | Fail | Fail | Fail | |
"Lock"
| Fail | Fail | Fail | Fail | |
"MediaApps"
| Fail | Fail | Fail | Fail | |
"MediaAudioTrack"
| Fail | Fail | Fail | Fail | |
"MediaLast"
| Fail | Fail | Fail | Fail | |
"MediaSkipBackward"
| Fail | Fail | Fail | Fail | |
"MediaSkipForward"
| Fail | Fail | Fail | Fail | |
"MediaStepBackward"
| Fail | Fail | Fail | Fail | |
"MediaStepForward"
| Fail | Fail | Fail | Fail | |
"MediaTopMenu"
| Fail | Fail | Fail | Fail | |
"NavigateIn"
| Fail | Fail | Fail | Fail | |
"NavigateNext"
| Fail | Fail | Fail | Fail | |
"NavigateOut"
| Fail | Fail | Fail | Fail | |
"NavigatePrevious"
| Fail | Fail | Fail | Fail | |
"NextFavoriteChannel"
| Fail | Fail | Fail | Fail | |
"NextUserProfile"
| Fail | Fail | Fail | Fail | |
"OnDemand"
| Fail | Fail | Fail | Fail | |
"Pairing"
| Fail | Fail | Fail | Fail | |
"PinPDown"
| Fail | Fail | Fail | Fail | |
"PinPMove"
| Fail | Fail | Fail | Fail | |
"PinPToggle"
| Fail | Fail | Fail | Fail | |
"PinPUp"
| Fail | Fail | Fail | Fail | |
"PlaySpeedDown"
| Fail | Fail | Fail | Fail | |
"PlaySpeedReset"
| Fail | Fail | Fail | Fail | |
"PlaySpeedUp"
| Fail | Fail | Fail | Fail | |
"RandomToggle"
| Fail | Fail | Fail | Fail | |
"RcLowBattery"
| Fail | Fail | Fail | Fail | |
"RecordSpeedNext"
| Fail | Fail | Fail | Fail | |
"RfBypass"
| Fail | Fail | Fail | Fail | |
"ScanChannelsToggle"
| Fail | Fail | Fail | Fail | |
"ScreenModeNext"
| Fail | Fail | Fail | Fail | |
"Settings"
| Fail | Fail | Fail | Fail | |
"SplitScreenToggle"
| Fail | Fail | Fail | Fail | |
"STBInput"
| Fail | Fail | Fail | Fail | |
"STBPower"
| Fail | Fail | Fail | Fail | |
"Subtitle"
| Fail | Fail | Fail | Fail | |
"Teletext"
| Fail | Fail | Fail | Fail | |
"VideoModeNext"
| Fail | Fail | Fail | Fail | |
"Wink"
| Fail | Fail | Fail | Fail | |
"ZoomToggle"
| Fail | Fail | Fail | Fail |
4. Acknowledgements
Special thanks to Masayuki Nakano (Mozilla) for his work gathering some of the implementation data that was used in this document - particularly those relating to IMEs and composition.