キーボードイベントの key の値 - Web API

キーボードイベントの key の値
=================

以下の一覧表は、 `KeyboardEvent.key` プロパティの標準値と、そのキーが通常どのような目的で使用されるかの説明です。利用できる場合には、一般的なプラットフォームの仮想キーコードも記載しています。

特殊な値
----

特定のキーや文字を識別する以外に特別な意味を持つ `key` の値です。

| `KeyboardEvent.key` 値 | 説明 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Unidentified"` | ユーザーエージェントは、イベントの仮想キーコードを特定のキー値に割り当てることができませんでした。
これは、ハードウェアやソフトウェアの制約、あるいはユーザーエージェントが動作しているプラットフォームの制約によって起こる可能性があります。 | *様々* | *様々* | *様々* | *様々* |

修飾キー
----

修飾キーとは、特別な文字を生成したり、他のキーと組み合わせて使用したときに特別な動作を発生させるための特別なキーのことです。例えば、 `Shift` や `Control` キー、`Caps Lock` や `NumLock` のようなロックキーが挙げられます。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Alt"` [4] | `Alt` (Alternative) キー。 | `VK_MENU` (0x12)`VK_LMENU` (0xA4)`VK_RMENU`
 (0xA5)
  | `kVK_Option` (0x3A)`kVK_RightOption` (0x3D) | `GDK_KEY_Alt_L` (0xFFE9)`GDK_KEY_Alt_R`
 (0xFFEA)`Qt::Key_Alt` (0x01000023)
  | `KEYCODE_ALT_LEFT` (57)`KEYCODE_ALT_RIGHT`
 (58)
  |
| `"AltGraph"` [4] | `AltGr` または `AltGraph` (Alternate Graphics) キー。
 ISO レベル 3 のシフト修飾（`Shift` はレベル 2 修飾）ができるようにします。
  |  |  | `GDK_KEY_Mode_switch` (0xFF7E)`GDK_KEY_ISO_Level3_Shift`
 (0xFE03)`GDK_KEY_ISO_Level3_Latch` (0xFE04)`GDK_KEY_ISO_Level3_Lock`
 (0xFE05)`GDK_KEY_ISO_Level5_Shift` (0xFE11)`GDK_KEY_ISO_Level5_Latch`
 (0xFE12)`GDK_KEY_ISO_Level5_Lock` (0xFE13)`Qt::Key_AltGr`
 (0x01001103`Qt::Key_Mode_switch` (0x0100117E)
  |  |
| `"CapsLock"` | `Caps Lock` キー。移行の入力における大文字ロックのオンとオフを切り替えます。 | `VK_CAPITAL` (0x14) | `kVK_CapsLock` (0x39) | `GDK_KEY_Caps_Lock` (0xFFE5)`Qt::Key_CapsLock`
 (0x01000024)
  | `KEYCODE_CAPS_LOCK` (115) |
| `"Control"` | `Control` キー、`Ctrl` キー、`Ctl` キーのいずれか。制御文字を入力します。 | `VK_CONTROL` (0x11)`VK_LCONTROL`
 (0xA2)`VK_RCONTROL` (0xA3)
  | `kVK_Control` (0x3B)`kVK_RightControl`
 (0x3E)
  | `GDK_KEY_Control_L` (0xFFE3)`GDK_KEY_Control_R`
 (0xFFE4)`Qt::Key_Control` (0x01000021)
  | `KEYCODE_CTRL_LEFT` (113)`KEYCODE_CTRL_RIGHT`
 (114)
  |
| `"Fn"` | `Fn`（機能修飾）キー。専用のファンクションキー領域のないキーボードでファンクションキー（`F1`-`F15` など）文字を生成できるように使用します。ハードウェアで処理されることが多く、その場合はこのキーのイベントが生成されません。 |  | `kVK_Function` (0x3F) |  | `KEYCODE_FUNCTION` (119) |
| `"FnLock"` | `FnLock` または `F-Lock` （機能ロック）キー。 `"Fn"` で記述されている機能キーモードの単発のオンとオフを切り替えます。ハードウェアで処理されることが多く、その場合はこのキーのイベントが生成されません。 |  |  |  |  |
| `"Hyper"` [3] | `Hyper` キーです。 |  |  | `GDK_KEY_Hyper_L` (0xFFED)`GDK_KEY_Hyper_R`
 (0xFFEE)`Qt::Key_Hyper_L` (0x01000056)`Qt::Key_Hyper_R`
 (0x01000057)
  |  |
| `"Meta"` [1] | `Meta` キー。特別なコマンド入力を発行できます。これは `Windows` ロゴキー、または Mac キーボードの `Command` または `⌘` キーです。 | `VK_LWIN` (0x5B)`VK_RWIN` (0x5C) | `kVK_Command` (0x37)`kVK_RightCommand`
 (0x36)
  | `GDK_KEY_Meta_L` (0xFFE7)`GDK_KEY_Meta_R`
 (0xFFE8)`Qt::Key_Meta` (0x01000022)
  | `KEYCODE_META_LEFT` (117)`KEYCODE_META_RIGHT`
 (118)
  |
| `"NumLock"` | `NumLock`（数字ロック）キー。テンキーパッドで数字を入力するモードと、他にもあるモード（多くは方向の矢印）を切り替えます。 | `VK_NUMLOCK` (0x90) |  | `GDK_KEY_Num_Lock` (0xFF7F)`Qt::Key_NumLock`
 (0x01000025)
  | `KEYCODE_NUM_LOCK` (143) |
| `"ScrollLock"` [2] | `Scroll Lock` キー。スクロールモードとカーソル移動モードを切り替えます。 | `VK_SCROLL` (0x91) |  | `GDK_KEY_Scroll_Lock` (0xFF14)`Qt::Key_ScrollLock`
 (0x01000026)
  | `KEYCODE_SCROLL_LOCK` (116) |
| `"Shift"` | `Shift` キー。大文字（など）を入力したり、句読点やその他の特殊文字の入力に対応するようにキーストロークを変更します。 | `VK_SHIFT` (0x10)`VK_LSHIFT`
 (0xA0)`VK_RSHIFT` (0xA1)
  | `kVK_Shift` (0x38)`kVK_RightShift` (0x3C) | `GDK_KEY_Shift_L` (0xFFE1)`GDK_KEY_Shift_R`
 (0xFFE2)`Qt::Key_Shift` (0x01000020)
  | `KEYCODE_SHIFT_LEFT` (59)`KEYCODE_SHIFT_RIGHT`
 (60)
  |
| `"Super"` [3] | `Super` キーです。 |  |  | `GDK_KEY_Super_L` (0xFFEB)`GDK_KEY_Super_R`
 (0xFFEC)`Qt::Key_Super_L` (0x01000053)`Qt::Key_Super_R`
 (0x01000054)
  |  |
| `"Symbol"` | `Symbol` 修飾キー（一部の仮想キーボードにあります）。 |  |  |  | `KEYCODE_SYM` (63) [2] |
| `"SymbolLock"` | `Symbol Lock` キーです。 |  |  |  |  |

[1] Firefox では `Windows` キーが `"Meta"` ではなく `"OS"` として報告されます。これは Firefox バグ 1232918 により Firefox で変更される予定です。修正されるまでは、これらのキーは `"OS"` として返されます。 Windows では `VK_LWIN` (0x5B) と `VK_RWIN` (0x5C)、Linux では `GDK_KEY_Super_L` (0xFFEB)、`GDK_KEY_Super_R` (0xFFEC)、`GDK_KEY_Hyper_L` (0xFFED)、`GDK_KEY_Hyper_R` (0xFFEE) です。

[2] Firefox は Firefox 37 まで `Symbol` キーに対応していませんでした。

[3] Firefox は `Super` と `Hyper` キーに対して、`"Super"` と `"Hyper"` の代わりに `"OS`" というキー値を生成します。

[4] Chrome 67 と Firefox 63 では、`Alt` キーが `AltGr` に割り当てられたキーボード レイアウトの場合、正しい `Alt` キーが正しく解釈されるようになりました。詳細は Firefox のバグ Firefox バグ 900750 と Chrome バグ 25503 を参照してください。

ホワイトスペースキー
----------

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Enter"` | `Enter` または `↵` キー（`Return` と書かれていることもあります）。 | `VK_RETURN` (0x0D) | `kVK_Return` (0x24)`kVK_ANSI_KeypadEnter`
 (0x4C)`kVK_Powerbook_KeypadEnter` (0x34)
  | `GDK_KEY_Return` (0xFF0D)`GDK_KEY_KP_Enter`
 (0xFF8D)`GDK_KEY_ISO_Enter` (0xFE34)`GDK_KEY_3270_Enter`
 (0xFD1E)`Qt::Key_Return` (0x01000004)`Qt::Key_Enter`
 (0x01000005)
  | `KEYCODE_ENTER` (66)`KEYCODE_NUMPAD_ENTER`
 (160)`KEYCODE_DPAD_CENTER` (23)
  |
| `"Tab"` | 水平タブキー、 `Tab` です。 | `VK_TAB` (0x09) | `kVK_Tab` (0x30) | `GDK_KEY_Tab` (0xFF09)`GDK_KEY_KP_Tab`
 (0xFF89)`GDK_KEY_ISO_Left_Tab` (0xFE20)`Qt::Key_Tab`
 (0x01000001)
  | `KEYCODE_TAB` (61) |
| `" "` [1] | スペースキー、`スペースバー`です。 | `VK_SPACE` (0x20) | `kVK_Space` (0x31) |
`GDK_KEY_space` (0x20)`GDK_KEY_KP_Space`
 (0xFF80)`Qt::Key_Space` (0x20)
  | `KEYCODE_SPACE` (62) |

[1] 古いブラウザーは`スペースバー`に対して `" "` の代わりに `"Spacebar"` を返すことがあります。Firefox はバージョン 37 までそうでした。

ナビゲーションキー
---------

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"ArrowDown"` [1] | 下矢印キーです。 | `VK_DOWN` (0x28) | `kVK_DownArrow` (0x7D) | `GDK_KEY_Down` (0xFF54)`GDK_KEY_KP_Down`
 (0xFF99)`Qt::Key_Down` (0x01000015)
  | `KEYCODE_DPAD_DOWN` (20) |
| `"ArrowLeft"` [1] | 左矢印キーです。 | `VK_LEFT` (0x25) | `kVK_LeftArrow` (0x7B) | `GDK_KEY_Left` (0xFF51)`GDK_KEY_KP_Left`
 (0xFF96)`Qt::Key_Left` (0x01000012)
  | `KEYCODE_DPAD_LEFT` (21) |
| `"ArrowRight"` [1] | 右矢印キーです。 | `VK_RIGHT` (0x27) | `kVK_RightArrow` (0x7C) | `GDK_KEY_Right` (0xFF53)`GDK_KEY_KP_Right`
 (0xFF98)`Qt::Key_Right` (0x01000014)
  | `KEYCODE_DPAD_RIGHT` (22) |
| `"ArrowUp"` [1] | 右矢印キーです。 | `VK_UP` `(0x26)` | `kVK_UpArrow` (0x7E) | `GDK_KEY_Up` (0xFF52)`GDK_KEY_KP_Up`
 (0xFF97)`Qt::Key_Up` (0x01000013)
  | `KEYCODE_DPAD_UP` (19) |
| `"End"` | `End` キーです。コンテンツの末尾まで移動します。 | `VK_END` (0x23) | `kVK_End` (0x77) | `GDK_KEY_End` (0xFF57)`GDK_KEY_KP_End`
 (0xFF9C)`Qt::Key_End` (0x01000011)
  | `KEYCODE_MOVE_END` (123) |
| `"Home"` | `Home` キーです。コンテンツの先頭まで移動します。 | `VK_HOME` (0x24) | `kVK_Home` (0x73) | `GDK_KEY_Home` (0xFF50)`GDK_KEY_KP_Home`
 (0xFF95)`Qt::Key_Home` (0x01000010)
  | `KEYCODE_MOVE_HOME` (122) |
| `"PageDown"` | `Page Down`（または `PgDn`）キーです。下が見えるようにスクロールするか、コンテンツの次のページを表示します。 | `VK_NEXT` (0x22) | `kVK_PageDown` `(0x79)` | `GDK_KEY_Page_Down` (0xFF56)`GDK_KEY_KP_Page_Down`
 (0xFF9B)`Qt::Key_PageDown` (0x01000017)
  | `KEYCODE_PAGE_DOWN` (93) |
| `"PageUp"` | `Page Up`（または `PgUp`）キーです。上が見えるようにスクロールするか、コンテンツの前のページを表示します。 | `VK_PRIOR` (0x21) | `kVK_PageUp` (0x74) | `GDK_KEY_Page_Up` (0xFF55)`GDK_KEY_KP_Page_Up`
 (0xFF9A)`Qt::Key_PageUp` (0x01000016)
  | `KEYCODE_PAGE_UP` (92) |

[1] Edge （16 およびそれ以前）と Firefox （36 およびそれ以前）では、`"ArrowLeft"`、`"ArrowRight"`、`"ArrowUp"`、`"ArrowDown"` の代わりに `"Left"`、`"Right"`、`"Up"`、`"Down"` を使用しています。

編集キー
----

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Backspace"` | `Backspace` キーです。このキーは Mac キーボードでは `Delete` と書かれています。 | `VK_BACK` (0x08) | `kVK_Delete` (0x33) | `GDK_KEY_BackSpace` (0xFF08)`Qt::Key_Backspace`
 (0x01000003)
  | `KEYCODE_DEL` (67) |
| `"Clear"` | `Clear` キーです。現在選択されている入力を削除します。 | `VK_CLEAR` (0x0C)`VK_OEM_CLEAR` (0xFE) | `kVK_ANSI_KeypadClear` (0x47) | `GDK_KEY_Clear` (0xFF0B)`Qt::Key_Clear`
 (0x0100000B)
  | `KEYCODE_CLEAR` (28) |
| `"Copy"` | `Copy` キーです（一部の拡張キーボードにおいて）。 | `APPCOMMAND_COPY` |  | `GDK_KEY_Copy` (0x1008FF57)`Qt::Key_Copy`
 (0x010000CF)
  |  |
| `"CrSel"` [3] | カーソル選択キー、 `CrSel` です。 | `VK_CRSEL` (0xF7) |  | `GDK_KEY_3270_CursorSelect` (0xFD1C) |  |
| `"Cut"` | `Cut` キーです（一部の拡張キーボードにおいて）。 | `APPCOMMAND_CUT` |  | `GDK_KEY_Cut` (0x1008FF58)`Qt::Key_Cut`
 (0x010000D0)
  |  |
| `"Delete"` [2] | 削除キー、 `Del` です。 | `VK_DELETE` (0x2E) | `kVK_ForwardDelete` (0x75) [1] | `GDK_KEY_Delete` (0xFFFF)`GDK_KEY_KP_Delete`
 (0xFF9F)`Qt::Key_Delete` (0x01000007)
  | `KEYCODE_FORWARD_DEL` (112) |
| `"EraseEof"` | フィールドの終わりまで消去。現在のカーソル位置から現在のフィールドの終わりまでのすべての文字を削除します。 | `VK_EREOF` (0xF9) |  | `GDK_KEY_3270_ExSelect` (0xFD1B) |  |
| `"ExSel"` [4] | `ExSel` (Extend Selection) キーです。 | `VK_EXSEL` (0xF8) |  | `GDK_KEY_3270_ExSelect` (0xFD1B) |  |
| `"Insert"` | 挿入キー `Ins` です。テキストの挿入と上書きを切り替えます。 | `VK_INSERT` (0x2D) |  | `GDK_KEY_Insert` (0xFF63)`GDK_KEY_KP_Insert`
 (0xFF9E)`Qt::Key_Insert` (0x01000006)
  | `KEYCODE_INSERT` (124) |
| `"Paste"` | クリップボードから貼り付けます。 | `APPCOMMAND_PASTE` |  | `GDK_KEY_Paste` (0x1008FF6D)`Qt::Key_Paste`
 (0x010000E2)
  |  |
| `"Redo"` | 最後の操作をやり直します。 | `APPCOMMAND_REDO` |  | `GDK_KEY_Redo` (0xFF66) |  |
| `"Undo"` | 最後の操作を取り消します。 | `APPCOMMAND_UNDO` |  | `GDK_KEY_Undo` (0xFF65) |  |

[1] 専用の `Del` キーがないキーボードでは、Mac は `Fn` と `Delete` (他にも `Backspace`) が同時に押されたときに `"Delete"` 値を生成します。

[2] Firefox 36 以前では、`Del` キーに `"Delete"` の代わりに `"Del"` を使用しています。

[3] Firefox 36 以前では、`CrSel` キーが押されると、`"CrSel"` の代わりに `"Crsel"` という値が生成されます。

[4] Firefox 36 以前では、`ExSel` キーが押されると、`"ExSel"` の代わりに `"Exsel"` という値が生成されます。

UI キー
-----

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Accept"` | `Accept`, `Commit`, `OK` キーまたはボタン。現在選択されているオプションまたはインプットメソッドの一連の変換を受け入れます。 | `VK_ACCEPT` (0x1E) |  |  | `KEYCODE_DPAD_CENTER` (23) |
| `"Again"` | `Again` キー。前回の操作をやり直す、または繰り返します。 |  |  | `GDK_KEY_Redo` (0xFF66) |  |
| `"Attn"` [4] | `Attn` (Attention) キーです。td> | `VK_OEM_ATTN` (0xF0) |  | `GDK_KEY_3270_Attn` (0xFD0E) |  |
| `"Cancel"` [1] | `Cancel` キーです。 |  |  | `GDK_KEY_Cancel` (0xFF69) |  |
| `"ContextMenu"` [3] | コンテキストメニューを表示させます。通常、キーボード右側の `Windows` （または `OS`） キーと `Control` キーの間にあります。 | `VK_APPS` (0x5D) | `kVK_PC_ContextMenu` (0x6E) | `GDK_KEY_Menu` (0xFF67)`Qt::Key_Menu`
 (0x01000055)
  | `KEYCODE_MENU` (82) |
| `"Escape"` [2] | `Esc` （エスケープ）キー。通常、終了、取り消される可能性、または「この処理を脱出する」ボタンとして使用します。過去には、エスケープ文字は「エスケープシーケンス」と呼ばれる特別な制御シーケンスの開始を指示するために使用されていました。 | `VK_ESCAPE` (0x1B) | `kVK_Escape` (0x35) | `GDK_KEY_Escape` (0xFF1B)`Qt::Key_Escape`
 (0x01000000)
  | `KEYCODE_ESCAPE` (111) |
| `"Execute"` | `Execute` キーです。 | `VK_EXECUTE` (0x2B) |  | `Qt::Key_Execute` (0x01020003) |  |
| `"Find"` | `Find` キー。検索/サーチ処理を行うためのインターフェイス（通常はダイアログボックス）を開きます。 | `APPCOMMAND_FIND` |  | `GDK_KEY_Find` (0xFF68) |  |
| `"Finish"` [5] | `Finish` キーです。 | `VK_OEM_FINISH` (0xF1) |  |  |  |
| `"Help"` | `Help`キー。ヘルプ情報を開いたり、表示を切り替えたりします。 | `VK_HELP` (0x2F)`APPCOMMAND_HELP` | `kVK_Help` (0x72) | `GDK_KEY_Help` (0xFF6A)`Qt::Key_Help`
 (0x01000058)
  | `KEYCODE_HELP` (259) |
| `"Pause"` | `Pause` キー。現在のアプリケーションまたは状態を一時停止します。

**メモ:** これを `"MediaPause"` キー値と混同しないでください。そちらは、アプリケーションやプロセスを制御するためではなく、メディア制御に使用します。
 | `VK_PAUSE` (0x13) |  | `GDK_KEY_Pause` (0xFF13)`GDK_KEY_Break`
 (0xFF6B)`Qt::Key_Pause` (0x01000008)
  | `KEYCODE_BREAK` (121) |
| `"Play"` | `Play` キー。前回一時停止したアプリケーションを再開します。

**メモ:** これを `"MediaPlay"` キー値と混同しないでください。そちらは、アプリケーションやプロセスを制御するためではなく、メディア制御に使用します。
 | `VK_PLAY` (0xFA) |  | `GDK_KEY_3270_Play` (0xFD16)`Qt::Key_Play`
 (0x01020005)
  |  |
| `"Props"` | `Props` （プロパティ）キーです。 |  |  |  |  |
| `"Select"` | `Select` キーです。 | `VK_SELECT` (0x29) |  | `GDK_KEY_Select` (0xFF60) | `KEYCODE_BUTTON_SELECT` (109) |
| `"ZoomIn"` [6] | `ZoomIn` キーです。 |  |  | `GDK_KEY_ZoomIn` (0x1008FF8B)`Qt::Key_ZoomIn`
 (0x010000F6)
  | `KEYCODE_ZOOM_IN` (168) |
| `"ZoomOut"` [6] | `ZoomOut` キーです。 |  |  | `GDK_KEY_ZoomOut` (0x1008FF8C)`Qt::Key_ZoomOut`
 (0x010000F7)
  | `KEYCODE_ZOOM_OUT` (169) |

[1] Google Chrome 52 では、`Cancel` キーが誤って `"Pause"` というキーコードを返していました。これは Chrome 53 で修正されました（詳細は Chrome バグ 612749 を参照してください）。

[2] Firefox 36 以前では、`Esc` キーは `"Escape"` の代わりに `"Esc"` を返します。

[3] Firefox 36 以前では、コンテキストメニューキーは`"ContextMenu"`ではなく `"Apps"` と表示されます。

[4] Firefox と Google Chrome では、`Attn` キーはキーコード `"Unidentified"` を生成しますが、日本語キーボードレイアウトが有効な場合は、代わりに `"KanaMode"` を生成します。

[5] Firefox では `Finish` キーはキーコード `"Unidentified"` を生成しますが、日本語キーボードレイアウトが有効な場合は、代わりに `"Katakana"` を生成します。

[6] Firefox は Firefox 37 まで `"ZoomIn"` キーと `"ZoomOut"` キーに対応していませんでした。

端末キー
----

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"BrightnessDown"` | 輝度ダウンキー。通常、ディスプレイの輝度を下げるために使用します。 |  |  | `GDK_KEY_MonBrightnessDown` (0x1008FF03)`Qt::Key_MonBrightnessDown`
 (0x010000B3)
  | `KEYCODE_BRIGHTNESS_DOWN` (220) |
| `"BrightnessUp"` | 輝度アップキー。通常、ディスプレイの輝度を上げます。 |  |  | `GDK_KEY_MonBrightnessUp` (0x1008FF02)`Qt::Key_MonBrightnessUp`
 (0x010000B2)
  | `KEYCODE_BRIGHTNESS_UP` (221) |
| `"Eject"` | `イジェクト`キー。リムーバブルメディアを排出します （または、光学記憶装置のトレイの開閉を切り替えます）。 |  |  | `GDK_KEY_Eject` (0x1008FF2C)`Qt::Key_Eject`
 (0x010000B9)
  | `KEYCODE_MEDIA_EJECT` (129) |
| `"LogOff"` [2] | `LogOff` キーです。 |  |  | `GDK_KEY_LogOff` (0x1008FF61)`Qt::Key_LogOff`
 (0x010000D9)
  |  |
| `"Power"` | `電源`ボタンまたはキーで、電源のオン/オフを切り替えます。

**メモ:** すべてのシステムがこのキーをユーザーエージェントに渡すとは限りません。
 |  |  |  | `KEYCODE_POWER` (26) |
| `"PowerOff"` | `PowerOff` または `PowerDown` キー。システムをシャットダウンします。 |  |  | `GDK_KEY_PowerDown` (0x1008FF21)`GDK_KEY_PowerOff`
 (0x1008FF2A)`Qt::Key_PowerDown` (0x0100010B)`Qt::Key_PowerOff`
 (0x010000B7)
  |  |
| `"PrintScreen"` | `PrintScreen` または `PrtScr` キー。 `SnapShot` となっていることもあります。画面をキャプチャして出力したり、ディスクに保存したりします。 | `VK_SNAPSHOT` (0x2C) |  | `GDK_KEY_3270_PrintScreen` (0xFD1D)`GDK_KEY_Print`
 (0xFF61)`GDK_KEY_Sys_Req` (0xFF15)`Qt::Key_Print`
 (0x01000009)`Qt::Key_SysReq` (0x0100000A)
  | `KEYCODE_SYSRQ` (120) |
| `"Hibernate"` [2] | `Hibernate` キー。コンピューターの状態をディスクに保存してシャットダウンします。コンピューターは、保存された状態情報を復元することで前回状態に戻すことができます。 |  |  | `GDK_KEY_Hibernate` (0x1008FFA8)`Qt::Key_Hibernate`
 (0x01000108)
  |  |
| `"Standby"` [1] | スタンバイキー（`サスペンド` または `スリープ` とも呼ばれます）。これにより、ディスプレイの電源がオフになり、コンピューターの電源が完全にオフになることなく、低消費電力モードになります。 | `VK_SLEEP` (0x5F) |  | `GDK_KEY_Standby` (0x1008FF10)`GDK_KEY_Suspend`
 (0x1008FFA7)`GDK_KEY_Sleep` (0x1008FF2F)`Qt::Key_Standby`
 (0x01000093)`Qt::Key_Suspend` (0x0100010C)`Qt::Key_Sleep`
 (0x01020004)
  | `KEYCODE_SLEEP` (223) |
| `"WakeUp"` [2] | `WakeUp`キー。ハイバネーションモードまたはスタンバイモードからコンピューターを起動するために使用します。 |  |  | `GDK_KEY_WakeUp` (0x1008FF2B)`Qt::Key_WakeUp`
 (0x010000B8)
  | `KEYCODE_WAKEUP` (224) |

[1] `Standby` キーは Firefox 36 以前では対応していないため、`"Unidentified"` として報告されます。

[2] Firefox 37 より前のバージョンでは、このキーは値 `"Unidentified"` を生成していました。

IME および変換キー
-----------

入力メソッドエディター (IME) で使用するキーです。単純なキー入力では入力しにくいテキストを入力するときに用い、キーボードの文字入力キーの数よりも多くの字句がある言語などのテキストを入力します。例えば、中国語、日本語、韓国語、ヒンディー語などが挙げられます。

複数の言語に共通するキーもあれば、固有の言語を対象とするキーボードにのみ存在するキーもあります。また、すべてのキーボードにこれらのキーがあるとは限りません。

### 共通の IME キー

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"AllCandidates"` | `全候補`キーは、入力中の候補が複数表示される複数候補モードを始めるために使います。 |  |  | `GDK_KEY_MultipleCandidate` (0xFF3D`Qt::Key_MultipleCandidate`
 (0x0100113D)
  |  |
| `"Alphanumeric"` | `英数`キーです。 | `VK_OEM_ATTN` (0xF0) |  | `GDK_KEY_Eisu_Shift` (0xFF2F)`GDK_KEY_Eisu_toggle`
 (0xFF30)`Qt::Key_Eisu_Shift` (0x0100112f)`Qt::Key_Eisu_toggle`
 (0x01001130)
  |  |
| `"CodeInput"` | `コード入力`キーは、コード入力モードを有効にします。コード入力モードでは、ユーザーはコードポイント（通常は Unicode 文字番号）を入力して文字を入力します。 |  |  | `GDK_KEY_Codeinput` (0xFF37)`Qt::Key_Codeinput`
 (0x01001137)
  |  |
| `"Compose"` | `Compose` キーです。 |  |  | `GDK_KEY_Multi_key` (0xFF20) [1]`Qt::Key_Multi_key`
 (0x01001120)
  |  |
| `"Convert"` [4] | `変換`キーは、現在の入力メソッドシーケンスを結果の文字に変換するよう IME に指示します。 | `VK_CONVERT` (0x1C) |  | `GDK_KEY_Henkan` (0xFF23)`Qt::Key_Henkan`
 (0x01001123)
  | `KEYCODE_HENKAN` (214) |
| `"Dead"` | デッド「合体」キー。つまり、アクセント記号付きの文字や他の修飾文字を生成するために、他のキーと組み合わせて使用するキー。単独で押しても文字は生成されません。
どのデットキーが押されたかを（複数のデットキーが存在する場合に）特定したい場合は、 `KeyboardEvent` の関連する `compositionupdate` イベントの `data` プロパティを調べることで可能です。 |  |  | 下記の Linux のデッドキーコードをご覧ください。 |  |
| `"FinalMode"` | `Final` （ファイナルモード）キーは、IME を使用するときにファイナルモードに入るために、アジアの一部のキーボードで使用されます。 | `VK_FINAL` (0x18) |  |  |  |
| `"GroupFirst"` | ISO/IEC 9995 キーボードの最初の文字グループに切り替えます。各キーは、自分自身で列を組み、複数の文字グループを持つことができます。このキーを押すと、以降のキー入力で、最初の列からのキー入力であると機器が解釈するようになります。 |  |  | `GDK_KEY_ISO_First_Group` (0xFE0C) |  |
| `"GroupLast"` | ISO/IEC 9995 キーボードの最後の文字グループに切り替えます。 |  |  | `GDK_KEY_ISO_Last_Group` (0xFE0E) |  |
| `"GroupNext"` [4] | ISO/IEC 9995 キーボードの次の文字グループに切り替えます。 |  |  | `GDK_KEY_ISO_Next_Group` (0xFE08) | `KEYCODE_LANGUAGE_SWITCH` (204) |
| `"GroupPrevious"` | ISO/IEC 9995キーボードの前の文字グループに切り替えます。 |  |  | `GDK_KEY_ISO_Prev_Group` (0xFE0A) |  |
| `"ModeChange"` [5] | モード変更キー。 IME の入力モードを切り替えたり、循環させたりします。 | `VK_MODECHANGE` (0x1F) |  | `GDK_KEY_Mode_switch` (0xFF7E)`GDK_KEY_script_switch`
 (0xFF7E)`Qt::Key_Mode_switch` (0x0100117E)
  | `KEYCODE_SWITCH_CHARSET` (95) |
| `"NextCandidate"` | 次候補機能キー。進行中の入力に対して次に一致する可能性のあるものを選択します。 |  |  |  |  |
| `"NonConvert"` [2] | `無変換`（「変換しない」）キー。これは IME を使用しているときに変換を実行せずに現在の入力メソッドシーケンスを受け入れます。 | `VK_NONCONVERT` (0x1D) |  | `GDK_KEY_Muhenkan` (0xFF22)`Qt::Key_Muhenkan`
 (0x01001122) | `KEYCODE_MUHENKAN` (213) |
| `"PreviousCandidate"` | 前候補キー。進行中の入力に対して一致する可能性のある前の候補を選択します。 |  |  | `GDK_KEY_PreviousCandidate` (0xFF3E)`Qt::Key_PreviousCandidate`
 (0x0100113E)
  |  |
| `"Process"` [3] | The `Process` キー。 IME に変換を処理するよう指示します。 | `VK_PROCESSKEY` (0xE5) |  |  |  |
| `"SingleCandidate"` [4] | 単一の候補」キー。（複数候補モードに対して）単一候補モードにします。このモードでは、一度に表示される候補は 1 つだけです。 |  |  | `GDK_KEY_SingleCandidate` (0xFF3C)`Qt::Key_SingleCandidate`
 (0x0100113C)
  |  |

[1] *X Window System* では、 `Compose` キーは `Multi` キーと呼ばれます。

[2] Firefox バージョン 36 以前では、`NonConvert` キーが正しい `"NonConvert"` ではなく `"Nonconvert"` として報告されます。

[3] `Process` キーは現在 Firefox では `"Unidentified"` を返します。 Google Chrome は IME が使用されていないかのようにキーの値を返します。

[4] Firefox 37 以前では、これらのキーは `"Unidentified"` でした。

[5] Firefox は `"ModeChange"` の代わりに `"AltGraph"` というキー値を生成します。

### 韓国語キーボードのみ

これらのキーは韓国語キーボードでのみ利用できます。他にも韓国語キーボード用に様々なプラットフォームで定義されているキーがありますが、これらは最も一般的で、 UI イベント仕様で定義されているものです。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"HangulMode"` | `Hangul` （韓国語文字集合）モードキーで、ハングルと英語の入力項目を切り替えます。 | `VK_HANGUL` (0x15) [1] |  | `GDK_KEY_Hangul` (0xFF31)`Qt::Key_Hangul`
 (0x01001131)
  |  |
| `"HanjaMode"` | ハングル文字をより固有の漢字に変換するための、漢字モードを選択します。 | `VK_HANJA` (0x19) [1] |  | `GDK_KEY_Hangul_Hanja` (0xFF34)`Qt::Key_Hangul_Hanja`
 (0x01001134)
  |  |
| `"JunjaMode"` | 韓国語を半角ラテン文字で表す「ジュンジャ」モードを選択します。 | `VK_JUNJA` (0x17) |  | `GDK_KEY_Hangul_Jeonja` (0xFF38)`Qt::Key_Hangul_Jeonja`
 (0x01001138)
  |  |

[1] Windows では `VK_HANGUL` と `VK_KANA` は `VK_HANJA` と `VK_KANJI` と同様に同じ数値のキーを持ちます。

### 日本語キーボードのみ

これらのキーは日本語キーボードでのみ利用できます。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Eisu"` [1] | `英数`キー。このキーの目的は IME によって定義されますが、IMEを閉じるために使用することもあります。 |  | `kVK_JIS_Eisu` (0x66) | `GDK_KEY_Eisu_toggle` (0xFF2F)`Qt::Key_Eisu_toggle`
 (0x01001130)
  | `KEYCODE_EISU` (212) |
| `"Hankaku"` [3] | `半角`（半角文字）キーです。 | `VK_OEM_AUTO` (0xF3) |  | `GDK_KEY_Hankaku` (0xFF29)`Qt::Key_Hankaku`
 (0x01001129)
  |  |
| `"Hiragana"` | `ひらがな`キーです。かな文字モードを選択します。 | `VK_OEM_COPY` (0xF2) |  | `GDK_KEY_Hiragana` (0xFF25)`Qt::Key_Hiragana`
 (0x01001125)
  |  |
| `"HiraganaKatakana"` [6] | ひらがなとカタカナを切り替えます。 |  |  | `GDK_KEY_Hiragana_Katakana` (0xFF27)`Qt::Key_Hiragana_Katakana`
 (0x01001127)
  | `KEYCODE_KATAKANA_HIRAGANA` (215) |
| `"KanaMode"` | `カナモード`（カナロック）キーです。 | `VK_KANA` (0x15) [2]`VK_ATTN` (0xF6) |  | `GDK_KEY_Kana_Lock` (0xFF2D)`GDK_KEY_Kana_Shift`
 (0xFF2E)`Qt::Key_Kana_Lock` (0x0100112D)`Qt::Key_Kana_Shift`
 (0x0100112E)
  |  |
| `"KanjiMode"` | `漢字モード`キー。中国由来の表意文字を使用して日本語を入力します。 | `VK_KANJI` [2] | `kVK_JIS_Kana` (0x68) | `GDK_KEY_Kanji` (0xFF21)`Qt::Key_Kanji`
 (0x01001121)
  | `KEYCODE_KANA` (218) |
| `"Katakana"` | `カタカナ`キーです。 | `VK_OEM_FINISH` (0xF1) |  | `GDK_KEY_Katakana` (0xFF26)`Qt::Key_Katakana`
 (0x01001126)
  |  |
| `"Romaji"` [5] | `ローマ字`キーです。ローマ字モードを選択します。 | `VK_OEM_BACKTAB` (0xF5) |  | `GDK_KEY_Romaji` (0xFF24)`Qt::Key_Romaji`
 (0x01001124)
  |  |
| `"Zenkaku"` [4] | `全角`文字キーです。 | `VK_OEM_ENLW` (0xF4) |  | `GDK_KEY_Zenkaku` (0xFF28)`Qt::Key_Zenkaku`
 (0x01001128)
  |  |
| `"ZenkakuHanaku"` [6] | `全角/半角`トグルキーです。 |  |  | `GDK_KEY_Zenkaku_Hankaku` (0xFF2A)`Qt::Zenkaku_Hankaku`
 (0x0100112A)
  | `KEYCODE_ZENKAKU_HANKAKU` (211) |

[1] Firefox 37 より前のバージョンでは、`Eisu` キーが誤って `"RomanCharacters"` に割り当てられていました。

[2] `VK_HANGUL` と `VK_KANA` は Windows 上では `VK_HANJA` と `VK_KANJI` と同様に同じ数値のキーです。

[3] Firefox 37 より前のバージョンでは、`半角`キーは Firefox 上でキー値 `"HalfWidth"` を生成していました。

[4] Firefox 36 以前のバージョンでは、このキーは日本語キーボードレイアウトでは `"FullWidth"`、その他すべてのキーボードレイアウトでは `"Unidentified"` と識別されます。Firefox 37 以降と Google Chrome のすべてのバージョンでは、`"Zenkaku"` を正しく返します。

[5] Firefox 36 およびそれ以前のバージョンでは、`ローマ字`キーが日本語キーボードでは `"RomanCharacters"` と認識され、他にもキーボードでは `"Unidentified"` と認識されます。

[6] このキーは Firefox 37 以前では `"Unidentified"` として報告されていました。

### Linux のデッドキーコード

Linux は特別な**デッドキー**を使用してアクセント記号付きの文字を生成します。デッドキーとは、文字キーと結合子で押されることで、アクセント記号付きの形を形成するキーのことです。 `KeyboardEvent` の関連する `compositionupdate` イベントの `data` プロパティを調べることで、どの固有のデッドキーが使用されたかを特定できます（複数のデッドキーが存在する場合）。

Linux で GTK を使ってアクセント記号やその他の特殊文字を生成するために使用できるデッドキーとその文字の表を探してください。

`data` の値は以下のいずれかになります。

| **`CompositionEvent.data`** 値 | 表記 | コメント |
| --- | --- | --- |
| `GDK_KEY_dead_grave` (0xFE50)`Qt::Key_Dead_Grave`
 (0x01001250)
  | ` |  |
| `GDK_KEY_dead_acute` (0xFE51)`Qt::Key_Dead_Acute`
 (0x01001251)
  | ´ |  |
| `GDK_KEY_dead_circumflex` (0xFE52)`Qt::Key_Dead_Circumflex`
 (0x01001252)
  | ˆ |  |
| `GDK_KEY_dead_tilde` (0xFE53)`Qt::Key_Dead_Tilde`
 (0x01001253)
  | ˜ |  |
| `GDK_KEY_dead_perispomeni` (0xFE53) | ͂ |  |
| `GDK_KEY_dead_macron` (0xFE54)`Qt::Key_Dead_Macron`
 (0x01001254)
  | ¯ |  |
| `GDK_KEY_dead_breve` (0xFE55)`Qt::Key_Dead_Breve`
 (0x01001255)
  | ˘ |  |
| `GDK_KEY_dead_abovedot` (0xFE56)`Qt::Key_Dead_Abovedot`
 (0x01001256)
  | ˙ |  |
| `GDK_KEY_dead_diaeresis` (0xFE57)`Qt::Key_Dead_Diaeresis`
 (0x01001257)
  | ¨ | ウムラウトとも呼ばれます。 |
| `GDK_KEY_dead_abovering` (0xFE58)`Qt::Key_Dead_Abovering`
 (0x01001258)
  | ˚ |  |
| `GDK_KEY_dead_doubleacute` (0xFE59)`Qt::Key_Dead_Doubleacute`
 (0x01001259)
  | ˝ |  |
| `GDK_KEY_dead_caron` (0xFE5A)`Qt::Key_Dead_Caron`
 (0x0100125A)
  | ˇ | háček とも呼ばれ、他の言語ではチェコ語で使用します。 |
| `GDK_KEY_dead_cedilla` (0xFE5B)`Qt::Key_Dead_Cedilla`
 (0x0100125B)
  | ¸ |  |
| `GDK_KEY_dead_ogonek` (0xFE5C)`Qt::Key_Dead_Ogonek`
 (0x0100125C)
  | ˛ | nosinė とも呼ばれ、ポーランド語や古アイルランド語で使用されています。 |
| `GDK_KEY_dead_iota` (0xFE5D)`Qt::Key_Dead_Iota`
 (0x0100125D)
  | ͅ | イオタの添字。 |
| `GDK_KEY_dead_voiced_sound` (0xFE5E)`Qt::Key_Dead_Voiced_Sound`
 (0x0100125E)
  | ゙ |  |
| `GDK_KEY_dead_semivoiced_sound` (0xFE5F)`Qt::Key_Dead_Semivoiced_Sound`
 (0x0100125F)
  | ゚ |  |
| `GDK_KEY_dead_belowdot` (0xFE60)`Qt::Key_Dead_Belowdot`
 (0x01001260)
  | ̣̣ |  |
| `GDK_KEY_dead_hook` (0xFE61)`Qt::Key_Dead_Hook`
 (0x01001261)
  | ̡ |  |
| `GDK_KEY_dead_horn` (0xFE62)`Qt::Key_Dead_Horn`
 (0x01001262)
  | ̛ |  |
| `GDK_KEY_dead_stroke` (0xFE63) | ̶̶ |  |
| `GDK_KEY_dead_abovecomma` (0xFE64) | ̓̓ |  |
| `GDK_KEY_dead_psili` (0xFE64) | ᾿ |  |
| `GDK_KEY_dead_abovereversedcomma` (0xFE65) | ʽ |  |
| `GDK_KEY_dead_dasia` (0xFE65) | ῾ |  |
| `GDK_KEY_dead_doublegrave` (0xFE66) | ̏ |  |
| `GDK_KEY_dead_belowring` (0xFE67) | ˳ |  |
| `GDK_KEY_dead_belowmacron` (0xFE68) | ̱ |  |
| `GDK_KEY_dead_belowcircumflex` (0xFE69) | ꞈ |  |
| `GDK_KEY_dead_belowtilde` (0xFE6A) | ̰ |  |
| `GDK_KEY_dead_belowbreve` (0xFE6B) | ̮ |  |
| `GDK_KEY_dead_belowdiaeresis` (0xFE6C) | ̤ |  |
| `GDK_KEY_dead_invertedbreve` (0xFE6D) | ̯ |  |
| `GDK_KEY_dead_belowcomma` (0xFE6E) | ̦ |  |
| `GDK_KEY_dead_currency` (0xFE6F) |  |  |
| `GDK_KEY_dead_a` (0xFE80) |  |  |
| `GDK_KEY_dead_A` (0xFE81) |  |  |
| `GDK_KEY_dead_e` (0xFE82) |  |  |
| `GDK_KEY_dead_E` (0xFE83) |  |  |
| `GDK_KEY_dead_i` (0xFE84) |  |  |
| `GDK_KEY_dead_I` (0xFE85) |  |  |
| `GDK_KEY_dead_o` (0xFE86) |  |  |
| `GDK_KEY_dead_O` (0xFE87) |  |  |
| `GDK_KEY_dead_u` (0xFE88) |  |  |
| `GDK_KEY_dead_U` (0xFE89) |  |  |
| `GDK_KEY_dead_small_schwa` (0xFE8A) | ə |  |
| `GDK_KEY_dead_capital_schwa` (0xFE8B) | Ə |  |
| `GDK_KEY_dead_greek` (0xFE8C) |  |  |

ファンクションキー
---------

さまざまなプラットフォームが `F1`-`F12` （または `F1`-`F10`、`F1`-`F15` など）のように異なる数の汎用ファンクションキーに対応していますが、最初のいくつかは以下のように固有の定義をしています。

もしさらにファンクションキーが利用できるのであれば、その名前もここでのパターンを続け、各キーの名前の数字部分を増加し、例えば `"F24"` が有効なキー値となるようにします。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"F1"` | 最初の汎用ファンクションキー、 `F1` です。 | `VK_F1` (0x70) | `kVK_F1` (0x7A) | `GDK_KEY_F1` (0xFFBE)`GDK_KEY_KP_F1`
 (0xFF91)`Qt::Key_F1` (0x01000030)
  | `KEYCODE_F1` (131) |
| `"F2"` | `F2` キーです。 | `VK_F2` (0x71) | `kVK_F2` (0x78) | `GDK_KEY_F2` (0xFFBF)`GDK_KEY_KP_F2`
 (0xFF92)`Qt::Key_F2` (0x01000031)
  | `KEYCODE_F2` (132) |
| `"F3"` | `F3` キーです。 | `VK_F3` (0x72) | `kVK_F3` (0x63) | `GDK_KEY_F3` (0xFFC0)`GDK_KEY_KP_F3`
 (0xFF93)`Qt::Key_F3` (0x01000032)
  | `KEYCODE_F3` (133) |
| `"F4"` | `F4` キーです。 | `VK_F4` (0x73) | `kVK_F4` (0x76) | `GDK_KEY_F4` (0xFFC1)`GDK_KEY_KP_F4`
 (0xFF94)`Qt::Key_F4` (0x01000033)
  | `KEYCODE_F4` (134) |
| `"F5"` | `F5` キーです。 | `VK_F5` (0x74) | `kVK_F5` (0x60) | `GDK_KEY_F5` (0xFFC2)`Qt::Key_F5`
 (0x01000034)
  | `KEYCODE_F5` (135) |
| `"F6"` | `F6` キーです。 | `VK_F6` (0x75) | `kVK_F6` (0x61) | `GDK_KEY_F6` (0xFFC3)`Qt::Key_F6`
 (0x01000035)
  | `KEYCODE_F6` (136) |
| `"F7"` | `F7` キーです。 | `VK_F7` (0x76) | `kVK_F7` (0x62) | `GDK_KEY_F7` (0xFFC4)`Qt::Key_F7`
 (0x01000036)
  | `KEYCODE_F7` (137) |
| `"F8"` | `F8` キーです。 | `VK_F8` (0x77) | `kVK_F8` (0x64) | `GDK_KEY_F8` (0xFFC5)`Qt::Key_F8`
 (0x01000037)
  | `KEYCODE_F8` (138) |
| `"F9"` | `F9` キーです。 | `VK_F9` (0x78) | `kVK_F9` (0x65) | `GDK_KEY_F9` (0xFFC6)`Qt::Key_F9`
 (0x01000038)
  | `KEYCODE_F9` (139) |
| `"F10"` | `F10` キーです。 | `VK_F10` (0x79) | `kVK_F10` (0x6D) | `GDK_KEY_F10` (0xFFC7)`Qt::Key_F10`
 (0x01000039)
  | `KEYCODE_F10` (140) |
| `"F11"` | `F11` キーです。 | `VK_F11` (0x7A) | `kVK_F11` (0x67) | `GDK_KEY_F11` (0xFFC8)`Qt::Key_F11`
 (0x0100003A)
  | `KEYCODE_F11` (141) |
| `"F12"` | `F12` キーです。 | `VK_F12` (0x7B) | `kVK_F12` (0x6F) | `GDK_KEY_F12` (0xFFC9)`Qt::Key_F12`
 (0x0100003B)
  | `KEYCODE_F12` (142) |
| `"F13"` | `F13` キーです。 | `VK_F13` (0x7C) | `kVK_F13` (0x69) | `GDK_KEY_F13` (0xFFCA)`Qt::Key_F13`
 (0x0100003C)
  | `KEYCODE_F13` |
| `"F14"` | `F14` キーです。 | `VK_F14` (0x7D) | `kVK_F14` (0x6B) | `GDK_KEY_F14` (0xFFCB)`Qt::Key_F1`4
 (0x0100003D)
  | `KEYCODE_F14` |
| `"F15"` | `F15` キーです。 | `VK_F15` (0x7E) | `kVK_F15` (0x71) | `GDK_KEY_F15` (0xFFCC)`Qt::Key_F1`5
 (0x0100003E)
  | `KEYCODE_F15` |
| `"F16"` | `F16` キーです。 | `VK_F16` (0x7F) | `kVK_F16` (0x6A) | `GDK_KEY_F16` (0xFFCD)`Qt::Key_F1`6
 (0x0100003F)
  | `KEYCODE_F16` |
| `"F17"` | `F17` キーです。 | `VK_F17` (0x80) | `kVK_F17` (0x40) | `GDK_KEY_F17` (0xFFCE)`Qt::Key_F1`7
 (0x01000040)
  | `KEYCODE_F17` |
| `"F18"` | `F18` キーです。 | `VK_F18` (0x81) | `kVK_F18` (0x4F) | `GDK_KEY_F18` (0xFFCF)`Qt::Key_F1`8
 (0x01000041)
  | `KEYCODE_F18` |
| `"F19"` | `F19` キーです。 | `VK_F19` (0x82) | `kVK_F19` (0x50) | `GDK_KEY_F19` (0xFFD0)`Qt::Key_F1`9
 (0x01000042)
  | `KEYCODE_F19` |
| `"F20"` | `F20` キーです。 | `VK_F20` (0x83) | `kVK_F20` (0x5A) | `GDK_KEY_F20` (0xFFD1)`Qt::Key_F20`
 (0x01000043)
  | `KEYCODE_F20` |
| `"Soft1"` | 最初の汎用仮想ファンクションキーです。 |  |  | `Qt::Key_Context1` (0x01100000) |  |
| `"Soft2"` | 2 番目の汎用仮想ファンクションキーです。 |  |  | `Qt::Key_Context2` (0x01100001) |  |
| `"Soft3"` | 3 番目の汎用仮想ファンクションキーです。 |  |  | `Qt::Key_Context3` (0x01100002) |  |
| `"Soft4"` | 4 番目の汎用仮想ファンクションキーです。 |  |  | `Qt::Key_Context4` (0x01100003) |  |

電話キー
----

これらのキーは現代のスマートフォンによくあるボタンを表します。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"AppSwitch"` | ユーザーがすばやくアプリケーションを切り替えることができる、最近使用したアプリケーションのリストを表示しています。 |  |  |  | `KEYCODE_APP_SWITCH` (181) |
| `"Call"` | `Call` キー。入力した番号をダイヤルします。 |  |  | `Qt::Key_Call` (0x01100004) | `KEYCODE_CALL` (5) |
| `"Camera"` | `カメラ`キー。カメラを起動します。 |  |  | `Qt::Key_Camera` (0x01100020) | `KEYCODE_CAMERA` (27) |
| `"CameraFocus"` | `フォーカス`キー。カメラの焦点を合わせます。 |  |  | `Qt::Key_CameraFocus` (0x01100021) | `KEYCODE_FOCUS` (80) |
| `"EndCall"` | `終話`または`電話を切る`ボタン。 |  |  | `Qt::Key_Hangup` (0x01100005) | `KEYCODE_ENDCALL` (6) |
| `"GoBack"` | `戻る`ボタン。 |  |  |  | `KEYCODE_BACK` (4) |
| `"GoHome"` [1] | `ホーム`ボタン。ユーザーを電話のメイン画面（通常はアプリケーションランチャー）へ帰します。 |  |  |  | `KEYCODE_HOME` (3) |
| `"HeadsetHook"` | `ヘッドセットフック`キー。これは通常、実際にヘッドセットのボタンで、呼び出しを切断したり、メディアを再生または一時停止したりするために使用します。 |  |  | `Qt::Key_ToggleCallHangup` (0x01100007) | `KEYCODE_HEADSETHOOK` (79) |
| `"LastNumberRedial"` | `リダイヤル`ボタン。最後に呼び出された番号を再ダイヤルします。 |  |  | `Qt::Key_LastNumberRedial` (0x01100009) |  |
| `"Notification"` | `Notification` キーです。 |  |  |  | `KEYCODE_NOTIFICATION` (83) |
| `"MannerMode"` | サイレント、バイブレーション、鳴動などの通知モードを切り替えるボタン。 |  |  |  | `KEYCODE_MANNER_MODE` (205) |
| `"VoiceDial"` | `音声ダイヤル`キー。音声ダイヤルを開始します。 |  |  | `Qt::Key_VoiceDial` (0x01100008) | `KEYCODE_VOICE_ASSIST` (231) |

[1] Firefox 37 より前のバージョンでは、ホームボタンは `"Exit"` というキーコードを生成していました。Firefox 37 以降では、このボタンは `"MozHomeScreen"` というキーコードを生成します。

マルチメディアキー
---------

マルチメディアキーは、一部のキーボードにある、メディア機器を制御するための追加のボタンまたはキーです。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"ChannelDown"` | 前のチャンネルへの切り替え。 | `APPCOMMAND_MEDIA_CHANNEL_DOWN` |  | `Qt::Key_ChannelDown` (0x01000119) | `KEYCODE_CHANNEL_DOWN` (167) |
| `"ChannelUp"` | Switches to the next channel. | `APPCOMMAND_MEDIA_CHANNEL_UP` |  | `Qt::Key_ChannelUp` (0x01000118) | `KEYCODE_CHANNEL_UP` (166) |
| `"MediaFastForward"` [2] | メディアの早送りを始めたり、続けたり、速度を上げたりします。 | `APPCOMMAND_MEDIA_FAST_FORWARD` |  | `GDK_KEY_AudioForward (0x1008FF97)Qt:Key_AudioForward`
 (0x01000102)
  | `KEYCODE_MEDIA_FAST_FORWARD` (90) |
| `"MediaPause"` | 再生中のメディアを一時停止します。

**メモ:** 古いアプリケーションでは `"Pause"` を使用しているものもありますが、これは正しくありません。
 | `APPCOMMAND_MEDIA_PAUSE` |  | `GDK_KEY_AudioPause` (0x1008FF31)`Qt::Key_MediaPause`
 (0x1000085)
  | `KEYCODE_MEDIA_PAUSE` (127) |
| `"MediaPlay"` | メディアの再生を通常速度で始めたり続けたりします。それ以外の場合は効果はありません。 | `APPCOMMAND_MEDIA_PLAY` |  | `GDK_KEY_AudioPlay` (0x1008FF14) | `KEYCODE_MEDIA_PLAY` `(126)` |
| `"MediaPlayPause"` | 現在のメディアの再生と一時停止を切り替えます。 | `VK_MEDIA_PLAY_PAUSE` (0xB3)`APPCOMMAND_MEDIA_PLAY_PAUSE` |  | `Qt::Key_MediaTogglePlayPause` (0x1000086) | `KEYCODE_MEDIA_PLAY_PAUSE` (85) |
| `"MediaRecord"` | 記録メディアを開始または再開します。 | `APPCOMMAND_MEDIA_RECORD` |  | `GDK_KEY_AudioRecord` (0x1008FF1C)`Qt::Key_MediaRecord`
 (0x01000084)
  | `KEYCODE_MEDIA_RECORD` `(130)` |
| `"MediaRewind"` | メディアの巻き戻しを始めたり、続けたり、速度を上げたりします。 | `APPCOMMAND_MEDIA_REWIND` |  | `GDK_KEY_AudioRewind` (0x1008FF3E)`Qt::Key_AudioRewind`
 (0x010000C5)
  | `KEYCODE_MEDIA_REWIND` `(89)` |
| `"MediaStop"` | 現在のメディアの動作（再生、録画、一時停止、転送、巻き戻しなど）を停止します。メディアがすでに停止している場合は、効果はありません。 | `VK_MEDIA_STOP` (0xB2)`APPCOMMAND_MEDIA_STOP` |  | `GDK_KEY_AudioStop` (0x1008FF15)`Qt::Key_MediaStop`
 (0x01000081)
  | `KEYCODE_MEDIA_STOP` (86) |
| `"MediaTrackNext"` [1] | 次のメディアや プログラムトラックへのシーク。 | `VK_MEDIA_NEXT_TRACK` (0xB0)`APPCOMMAND_MEDIA_NEXTTRACK` |  | `GDK_KEY_AudioNext` (0x1008FF17)`Qt::Key_MediaNext`
 (0x01000083)
  | `KEYCODE_MEDIA_NEXT` (87) |
| `"MediaTrackPrevious"` [1] | 前のメディアまたはプログラムトラックへのシーク。 | `VK_MEDIA_PREV_TRACK` (0xB1)`APPCOMMAND_MEDIA_PREVIOUSTRACK` |  | `GDK_KEY_AudioPrev` (0x1008FF16)`Qt::Key_MediaPrevious`
 (0x01000082)
  | `KEYCODE_MEDIA_PREVIOUS` (88) |

[1] 古い Edge と Firefox (36 以前) では、`"MediaTrackNext"` と `"MediaTrackPrevious"` の代わりに `"MediaNextTrack"` と `"MediaPreviousTrack"` を使用しています。

[2] Firefox 37 より前のバージョンでは、Firefox はキーコード `"MediaFastForward"` の代わりに、あるプラットフォームでは `"FastFwd"` を、他のプラットフォームでは `"Unidentified"` を生成していました。

音声制御キー
------

これらのメディアキーは、音声の制御に専用のキーとして使用します。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"AudioBalanceLeft"` | 音声バランスを左方向に調整します。 | `VK_AUDIO_BALANCE_LEFT` |  |  |  |
| `"AudioBalanceRight"` | 音声バランスを右方向に調整します。 | `VK_AUDIO_BALANCE_RIGHT` |  |  |  |
| `"AudioBassDown"` | 低音の音量を下げます。 | `APPCOMMAND_BASS_DOWN` |  |  |  |
| `"AudioBassBoostDown"` | 低音ブーストを減少させるか、低音ブーストモードまたは状態を下方向に循環させます。 | `VK_BASS_BOOST_DOWN` |  |  |  |
| `"AudioBassBoostToggle"` | 低音ブーストのオン／オフを切り替えます。 | `APPCOMMAND_BASS_BOOST` |  |  |  |
| `"AudioBassBoostUp"` | 低音ブーストの量を増やすか、低音ブーストの設定モードまたは状態を上向きに循環させます。 | `VK_BASS_BOOST_UP` |  |  |  |
| `"AudioBassUp"` | 低音の音量を上げます。 | `APPCOMMAND_BASS_UP` |  |  |  |
| `"AudioFaderFront"` | 音声フェーダーをフロント側に調整します。 | `VK_FADER_FRONT` |  |  |  |
| `"AudioFaderRear"` | 音声フェーダーをリア側に調整します。 | `VK_FADER_REAR` |  |  |  |
| `"AudioSurroundModeNext"` | 次に利用できるサラウンド音を選択します。 | `VK_SURROUND_MODE_NEXT` |  |  |  |
| `"AudioTrebleDown"` | 高音の音量を下げます。 | `APPCOMMAND_TREBLE_DOWN` |  |  |  |
| `"AudioTrebleUp"` | 高音の音量を上げます。 | `APPCOMMAND_TREBLE_UP` |  |  |  |
| `"AudioVolumeDown" [1]` | 音声の音量を下げます。 | `VK_VOLUME_DOWN` (0xAE)`APPCOMMAND_VOLUME_DOWN` | `kVK_VolumeDown` (0x49) | `GDK_KEY_AudioLowerVolume` (0x1008FF11)`Qt::Key_VolumeDown`
 (0x01000070)
  | `KEYCODE_VOLUME_DOWN` (25) |
| `"AudioVolumeMute" [1]` | 音声をミュートします。 | `VK_VOLUME_MUTE` (0xAD)`APPCOMMAND_VOLUME_MUTE` | `kVK_Mute` (0x4A) | `GDK_KEY_AudioMute` (0x1008FF12)`Qt::Key_VolumeMute`
 (0x01000071)
  | `KEYCODE_VOLUME_MUTE` (164) |
| `"AudioVolumeUp" [1]` | 音声の音量を上げます。 | `VK_VOLUME_UP` (0xAF)`APPCOMMAND_VOLUME_UP` | `kVK_VolumeUp` (0x48) | `GDK_KEY_AudioRaiseVolume` (0x1008FF13)`Qt::Key_VolumeUp`
 (0x01000072)
  | `KEYCODE_VOLUME_UP` (24) |
| `"MicrophoneToggle"` | マイクのオン／オフを切り替えます。 | `APPCOMMAND_MIC_ON_OFF_TOGGLE` |  |  |  |
| `"MicrophoneVolumeDown"` | マイクの入力音量を下げます。 | `APPCOMMAND_MICROPHONE_VOLUME_DOWN` |  | `Qt::Key_MicVolumeDown` (0x0100011E) |  |
| `"MicrophoneVolumeMute"` | マイク入力をミュートします。 | `APPCOMMAND_MICROPHONE_VOLUME_MUTE` |  | `GDK_KEY_AudioMicMute` (0x1008FFB2)`Qt::Key_MicMute`
 (0x01000113)
  | `KEYCODE_MUTE` (91) |
| `"MicrophoneVolumeUp"` | マイクの入力音量を上げます。 | `APPCOMMAND_MICROPHONE_VOLUME_UP` |  | `Qt::Key_MicVolumeUp` (0x0100011D) |  |

[1] 古い Edge と Firefox （48以前）では、`"AudioVolumeUp"`、`"AudioVolumeDown"`、`"AudioVolumeMute"`の代わりに、`"VolumeUp"`、`"VolumeDown"`、`"VolumeMute"`を使用しています。Firefox 49 では、これらは最新の仕様に一致するように更新されました。

TV 制御キー
-------

これらのキー値は、テレビ機器、またはテレビに対応しているコンピューターや電話に存在するボタンやキーを表しています。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"TV"` [1] | テレビ視聴モードに切り替えます。 |  |  |  | `KEYCODE_TV` (170) |
| `"TV3DMode"` | 3D TV モードのオン/オフを切り替えます。 |  |  |  | `KEYCODE_3D_MODE` (206) |
| `"TVAntennaCable"` | アンテナ入力とケーブル入力を切り替えます。 |  |  |  | `KEYCODE_TV_ANTENNA_CABLE` (242) |
| `"TVAudioDescription"` | 音声解説モードのオン／オフを切り替えます。 |  |  |  | `KEYCODE_TV_AUDIO_DESCRIPTION` (252) |
| `"TVAudioDescriptionMixDown"` | 音声解説の混合音量を下げます。番組音声に対して音声解説の音量を下げます。 |  |  |  | `KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN` (254) |
| `"TVAudioDescriptionMixUp"` | 音声解説の混合音量を上げます。番組音声に対して音声解説の音量を上げます。 |  |  |  | `KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP` (253) |
| `"TVContentsMenu"` | 再生に利用できるメディアコンテンツを表示または非表示にします（現在放送中の番組を示すチャンネルガイド、または再生するメディアファイルのリストです）。 |  |  |  | `KEYCODE_TV_CONTENTS_MENU` (256) |
| `"TVDataService"` | テレビのデータサービスメニューを表示または非表示にします。 |  |  |  | `KEYCODE_TV_DATA_SERVICE` (230) |
| `"TVInput"` [2] | 外部テレビの入力モードを切り替えます。 |  |  |  | `KEYCODE_TV_INPUT` (178) |
| `"TVInputComponent1"` | 「コンポーネント 1」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_COMPONENT_1` (249) |
| `"TVInputComponent2"` | 「コンポーネント 2」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_COMPONENT_2` (250) |
| `"TVInputComposite1"` | 「コンポジット 1」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_COMPOSITE_1` (247) |
| `"TVInputComposite2"` | 「コンポジット 2」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_COMPOSITE_2` (248) |
| `"TVInputHDMI1"` | 「HDMI 1」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_HDMI_1` (243) |
| `"TVInputHDMI2"` | 「HDMI 2」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_HDMI_2` (244) |
| `"TVInputHDMI3"` | 「HDMI 3」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_HDMI_3` (245) |
| `"TVInputHDMI4"` | 「HDMI 4」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_HDMI_4` (246) |
| `"TVInputVGA1"` | 「VGA 1」入力に切り替えます。 |  |  |  | `KEYCODE_TV_INPUT_VGA_1` (251) |
| `"TVMediaContext"` | メディアコンテキストメニューキーです。 |  |  |  | `KEYCODE_TV_MEDIA_CONTEXT_MENU` (257) |
| `"TVNetwork"` | テレビのネットワーク接続のオン/オフを切り替えます。 |  |  |  | `KEYCODE_TV_NETWORK` (241) |
| `"TVNumberEntry"` | テレビを番号入力モードにします。 |  |  |  | `KEYCODE_TV_NUMBER_ENTRY` (234) |
| `"TVPower"` [2] | 機器の電源ボタン。 |  |  |  | `KEYCODE_TV_POWER` (177) |
| `"TVRadioService"` | ラジオのボタン。 |  |  |  | `KEYCODE_TV_RADIO_SERVICE` (232) |
| `"TVSatellite"` | 衛星放送ボタン。 |  |  |  | `KEYCODE_TV_SATELLITE` (237) |
| `"TVSatelliteBS"` | BS 放送ボタン。 |  |  |  | `KEYCODE_TV_SATELLITE_BS` (238) |
| `"TVSatelliteCS"` | CS 放送ボタン。 |  |  |  | `KEYCODE_TV_SATELLITE_CS` (239) |
| `"TVSatelliteToggle"` | 利用できる衛星放送を切り替えます。 |  |  |  | `KEYCODE_TV_SATELLITE_SERVICE` (240) |
| `"TVTerrestrialAnalog"` | アナログ地上波テレビサービス（アナログケーブルまたはアンテナ受信）を選択します。 |  |  |  | `KEYCODE_TV_TERRESTRIAL_ANALOG` (235) |
| `"TVTerrestrialDigital"` | 地上デジタルテレビサービス（デジタルケーブルまたはアンテナ受信）を選択します。 |  |  |  | `KEYCODE_TV_TERRESTRIAL_DIGITAL` (236) |
| `"TVTimer"` | タイマー設定ボタン。 |  |  |  | `KEYCODE_TV_TIMER_PROGRAMMING` (258) |

[1] Firefox は Firefox 37 で `"TV"` キーに適切に対応しています。

[2] これらのキーは Firefox 37 までは `"Unidentified"` でした。

メディア制御キー
--------

現代のメディア機器用リモコンは、この文書内の他の場所で扱われる基本的なコントロールを超えるボタンを含むことが多いため、これらの追加ボタンの広範な配列に対してキー値が定義されています。

下記の値は、多くの家電製品の技術仕様から一部抜粋したものです。

* DTV Application Software Environment （ATSC 仕様の一部）
* Open Cable Application Platform
* ANSI/CEA-2014-B: UPnP™ ネットワークとインターネット上のリモートユーザーインターフェイスのためのウェブベースのプロトコルとフレームワーク
* Android KeyEvent key code values

**メモ:** リモコンには通常、マルチメディアキーや音声制御キーのように、すでに他の場所で定義されている値を持つキーが記載されています。それらのキーの値は、それらの表内の文書化されたものと一致します。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"AVRInput"` [3] | 外部 AVR ユニットの入力モードを変更します。 |  |  |  | `KEYCODE_AVR_INPUT` (182) |
| `"AVRPower"` [3] | 外部 AVR ユニットの電源を切り替えます。 |  |  |  | `KEYCODE_AVR_POWER` (181) |
| `"ColorF0Red"` [3] | 赤色に色分けされた汎用メディア機能キー。色キーのインデックスは `0` です。 | `VK_COLORED_KEY_0` |  |  | `KEYCODE_PROG_RED` (183) |
| `"ColorF1Green"` [3] | 緑色に色分けされた汎用メディア機能キー。色キーのインデックスは `1` です。 | `VK_COLORED_KEY_1` |  |  | `KEYCODE_PROG_GREEN` (184) |
| `"ColorF2Yellow"` [3] | 黄色に色分けされた汎用メディア機能キー。色キーのインデックスは `2` です。 | `VK_COLORED_KEY_2` |  |  | `KEYCODE_PROG_YELLOW` (185) |
| `"ColorF3Blue"` [3] | 青色に色分けされた汎用メディア機能キー。色キーのインデックスは `3` です。 | `VK_COLORED_KEY_3` |  |  | `KEYCODE_PROG_BLUE` (186) |
| `"ColorF4Grey"` | 灰色に色分けされた汎用メディア機能キー。色キーのインデックスは `4` です。 | `VK_COLORED_KEY_4` |  |  | `KEYCODE_PROG_GREY` |
| `"ColorF5Brown"` | 茶色に色分けされた汎用メディア機能キー。色キーのインデックスは `5` です。 | `VK_COLORED_KEY_5` |  |  | `KEYCODE_PROG_BROWN` |
| `"ClosedCaptionToggle"` | 字幕のオン／オフを切り替えます。 | `VK_CC` |  |  | `KEYCODE_CAPTIONS` (175) |
| `"Dimmer"` | 2 の明るさレベルの間でトグル*または*複数の明るさレベルの間で循環することによって、機器の明るさを調整します。 | `VK_DIMMER` |  | `GDK_KEY_BrightnessAdjust` (0x1008FF3B) |  |
| `"DisplaySwap"` | 映像ソースを循環させます。 | `VK_DISPLAY_SWAP` |  |  |  |
| `"DVR"` | 入力ソースをデジタルビデオレコーダー（DVR）に切り替えます。 |  |  |  | `KEYCODE_DVR` (173) |
| `"Exit"` | 終了ボタンで、現在のアプリケーションやメニューを終了します。 | `VK_EXIT` |  | `Qt::Key_Exit` (0x0102000a) |  |
| `"FavoriteClear0"` | お気に入りリストの最初のスロットに登録されている番組やコンテンツを消去します。 | `VK_CLEAR_FAVORITE_0` |  |  |  |
| `"FavoriteClear1"` | お気に入りリストの 2 つ目のスロットに登録されている番組やコンテンツを消去します。 | `VK_CLEAR_FAVORITE_1` |  |  |  |
| `"FavoriteClear2"` | お気に入りリストの 3 つ目のスロットに登録されている番組やコンテンツを消去します。 | `VK_CLEAR_FAVORITE_2` |  |  |  |
| `"FavoriteClear3"` | お気に入りリストの 4 つ目のスロットに登録されている番組やコンテンツを消去します。 | `VK_CLEAR_FAVORITE_3` |  |  |  |
| `"FavoriteRecall0"` | お気に入りリストの最初のスロットに格納されている番組やコンテンツを選択（呼び出し）します。 | `VK_RECALL_FAVORITE_0` |  |  |  |
| `"FavoriteRecall1"` | お気に入りリストの 2 つ目のスロットに格納されている番組やコンテンツを選択（呼び出し）します。 | `VK_RECALL_FAVORITE_1` |  |  |  |
| `"FavoriteRecall2"` | お気に入りリストの 3 つ目のスロットに格納されている番組やコンテンツを選択（呼び出し）します。 | `VK_RECALL_FAVORITE_2` |  |  |  |
| `"FavoriteRecall3"` | お気に入りリストの 4 つ目のスロットに格納されている番組やコンテンツを選択（呼び出し）します。 | `VK_RECALL_FAVORITE_3` |  |  |  |
| `"FavoriteStore0"` | お気に入りリストの最初のスロットに、現在の番組やコンテンツを登録します。 | `VK_STORE_FAVORITE_0` |  |  |  |
| `"FavoriteStore1"` | お気に入りリストの 2 つ目のスロットに、現在の番組やコンテンツを登録します。 | `VK_STORE_FAVORITE_1` |  |  |  |
| `"FavoriteStore2"` | お気に入りリストの 3 つ目のスロットに、現在の番組やコンテンツを登録します。 | `VK_STORE_FAVORITE_2` |  |  |  |
| `"FavoriteStore3"` | お気に入りリストの 4 つ目のスロットに、現在の番組やコンテンツを登録します。 | `VK_STORE_FAVORITE_3` |  |  |  |
| `"Guide"` | 番組ガイドまたはコンテンツガイドの表示を切り替えます。 | `VK_GUIDE` |  | `Qt::Key_Guide` (0x0100011A) | `KEYCODE_GUIDE` (172) |
| `"GuideNextDay"` | 現在ガイドが表示されている場合、このボタンは翌日のコンテンツを表示するようにガイドに指示します。 | `VK_NEXT_DAY` |  |  |  |
| `"GuidePreviousDay"` | 現在ガイドが表示されている場合、このボタンは前回までのコンテンツを表示するようにガイドに指示します。 | `VK_PREV_DAY` |  |  |  |
| `"Info"` | 現在選択されているコンテンツ、番組、メディアに関する情報の表示を切り替えます。 | `VK_INFO` |  | `Qt::Key_Info` (0x0100011B) | `KEYCODE_INFO` (165) |
| `"InstantReplay"` | 機器にインスタントリプレイ（通常、短時間にジャンプしてからもう一度再生するという形式で、使用可能ですが通常はスローモーションではありません）を指示します。 | `VK_INSTANT_REPLAY` |  |  |  |
| `"Link"` | 利用でき、可能であれば、現在の番組にリンクしたコンテンツを開きます。 | `VK_LINK` |  |  |  |
| `"ListProgram"` | 現在のプログラムを表示します。 | `VK_LIST` |  |  |  |
| `"LiveContent"` | 現在利用できるライブコンテンツや番組の一覧表示を切り替えます。 | `VK_LIVE` |  |  |  |
| `"Lock"` | 現在選択されているコンテンツまたは番組をロックまたはロック解除します。 | `VK_LOCK` |  |  |  |
| `"MediaApps"` | 写真ビューア、音声・動画プレイヤー、ゲームなどのメディアアプリケーションの一覧を表示しています。 [1] | `VK_APPS` |  |  |  |
| `"MediaAudioTrack"` | 音声トラックキーです。 |  |  |
 GDK\_KEY\_AudioCycleTrack (0x1008FF9B)`Qt::Key_AudioCycleTrack`
 (0x01000106)
  | `KEYCODE_MEDIA_AUDIO_TRACK` (222) |
| `"MediaLast"` | 最後に見たコンテンツや番組、他にもメディアにジャンプして戻ります。 | `VK_LAST` |  | `Qt::Key_MediaLast` (0x0100FFFF) | `KEYCODE_LAST_CHANNEL` (229) |
| `"MediaSkipBackward"` | 前回のコンテンツや番組にスキップします。 |  |  |  | `KEYCODE_MEDIA_SKIP_BACKWARD` |
| `"MediaSkipForward"` | 次のコンテンツや番組にスキップします。 | `VK_SKIP` |  |  | `KEYCODE_MEDIA_SKIP_FORWARD` |
| `"MediaStepBackward"` | 前回のコンテンツやプログラムに戻ります。 |  |  |  | `KEYCODE_MEDIA_STEP_BACKWARD` |
| `"MediaStepForward"` | 次のコンテンツやプログラムへの手順。 |  |  |  | `KEYCODE_MEDIA_SKIP_FORWARD` |
| `"MediaTopMenu"` | トップメニューボタン。メディアのメインメニューを開きます（DVD やブルーレイディスクの場合など）。 |  |  | `Qt::Key_TopMenu` (0x0100010A) | `KEYCODE_MEDIA_TOP_MENU` |
| `"NavigateIn"` | サブメニューまたはオプションに移動します。 |  |  |  | `KEYCODE_NAVIGATE_IN` |
| `"NavigateNext"` | 次のアイテムに移動します。 |  |  |  | `KEYCODE_NAVIGATE_NEXT` |
| `"NavigateOut"` | 現在の画面またはメニューから外へ移動します。 |  |  |  | `KEYCODE_NAVIGATE_OUT` |
| `"NavigatePrevious"` | 前のアイテムに移動します。 |  |  |  | `KEYCODE_NAVIGATE_PREVIOUS` |
| `"NextFavoriteChannel"` | お気に入りリストの次のチャンネルに移動します。 | `VK_NEXT_FAVORITE_CHANNEL` |  |  |  |
| `"NextUserProfile"` | この機能に対応していて、複数のプロファイルが存在する場合は、次に保存されたユーザープロファイルに循環します。 | `VK_USER` |  |  |  |
| `"OnDemand"` | オンデマンドコンテンツや視聴する番組を選択するためのユーザーインターフェイスを開きます。 | `VK_ON_DEMAND` |  |  |  |
| `"Pairing"` | リモコンと制御する機器をペアリングするプロセスを開始します。 |  |  |  | `KEYCODE_PAIRING` (225) |
| `"PinPDown"` | ピクチャインピクチャを下方向に移動させるボタンです。 | `VK_PINP_DOWN` |  |  |  |
| `"PinPMove"` | ピクチャインピクチャの移動を制御するボタンです。 | `VK_PINP_MOVE` |  |  |  |
| `"PinPToggle"` | ピクチャインピクチャ表示のオン／オフを切り替えます。 | `VK_PINP_TOGGLE` |  |  |  |
| `"PinPUp"` | ピクチャインピクチャを上方向に移動させるボタンです。 | `VK_PINP_UP` |  |  |  |
| `"PlaySpeedDown"` | メディアの再生速度を下げます。 | `VK_PLAY_SPEED_DOWN` |  |  |  |
| `"PlaySpeedReset"` | メディアの再生速度を通常に戻します。 | `VK_PLAY_SPEED_RESET` |  |  |  |
| `"PlaySpeedUp"` | メディアの再生速度を上げます。 | `VK_PLAY_SPEED_UP` |  |  |  |
| `"RandomToggle"` | ランダムメディア（「シャッフルモード」とも呼ばれます）のオン／オフを切り替えます。 | `VK_RANDOM_TOGGLE` |  | `GDK_KEY_AudioRandomPlay` (0x1008FF99) |  |
| `"RcLowBattery"` | リモコンの電池残量が少なくなったときに送信されるコード。実際には物理的なキーにはすべて対応していません。 | `VK_RC_LOW_BATTERY` |  |  |  |
| `"RecordSpeedNext"` | 利用できるメディアの記録速度を切り替えます。 | `VK_RECORD_SPEED_NEXT` |  |  |  |
| `"RfBypass"` | 無線周波数 (RF) 入力バイパスモードのオン／オフを切り替えます。 RF バイパスモードは、 RF 入力を処理やフィルタリングなしで直接 RF 出力に渡されます。 | `VK_RF_BYPASS` |  |  |  |
| `"ScanChannelsToggle"` | チャンネルスキャンモードのオン／オフを切り替えます。ユーザーがチャンネルスキャンを停止するまで、自動的にチャンネルが切り替わるモードです。 | `VK_SCAN_CHANNELS_TOGGLE` |  |  |  |
| `"ScreenModeNext"` | 利用できる画面表示モードを循環させます。 | `VK_SCREEN_MODE_NEXT` |  |  |  |
| `"Settings"` | 機器の設定画面の表示/非表示を切り替えます。 | `VK_SETTINGS` |  | `Qt::Key_Settings` (0x0100011C) | `KEYCODE_SETTINGS` |
| `"SplitScreenToggle"` | 画面分割表示モードのオン／オフを切り替えます。 | `VK_SPLIT_SCREEN_TOGGLE` |  | `GDK_KEY_SplitScreen (`0x1008FF7D)`Qt::Key_SplitScreen`
 (0x010000ED)
  |  |
| `"STBInput"` [3] | 外部セットトップボックス (STB) の入力モード間を循環します。 |  |  |  | `KEYCODE_STB_INPUT` (180) |
| `"STBPower"` [3] | 外部 STB のオン／オフを切り替えます。 |  |  |  | `KEYCODE_STB_POWER` (179) |
| `"Subtitle"` | 字幕が利用できる場合、字幕表示のオン/オフを切り替えます。 | `VK_SUBTITLE` |  | `GDK_KEY_Subtitle` (0x1008FF9A) | `KEYCODE_CAPTIONS` (175) |
| `"Teletext"` | 利用できる場合は、[teletext](https://en.wikipedia.org/wiki/Teletext) の表示を切り替えます。 | `VK_TELETEXT` |  |  | `KEYCODE_TV_TELETEXT` (233) |
| `"VideoModeNext"` [3] | 利用できる動画モードを循環させます。 | `VK_VIDEO_MODE_NEXT` |  | `GDK_KEY_Next_VMode` (0x1008FE22) |  |
| `"Wink"` | ライトを点滅させたり、インジケータライトの明るさを短時間変化させたり、トーンを発するなど、何らかの方法で機器自身を識別させます。 | `VK_WINK` |  |  |  |
| `"ZoomToggle"` [2] | 全画面表示と拡大縮小するコンテンツを切り替えたり、拡大レベルを変更したりします。 | `VK_ZOOM` (0xFB) |  | `Qt::Key_Zoom` (0x01020006) | `KEYCODE_TV_ZOOM_MODE` (255) |

[1] メディアコントローラーの `VK_APPS` キーとウィンドウズの `VK_APPS` キーを混同しないでください。このキーは `"ContextMenu"` とエンコードされます

[2] Firefox 36 およびそれ以前のバージョンでは、ズーム切り替えボタンは `"Zoom"` です。 Firefox 37 では `"ZoomToggle"` に修正されました。

[3] これらのキーは Firefox 37 までは `"Unidentified"` でした。

音声認識キー
------

これらの特別なマルチメディアキーは、音声認識機能を制御するために使用します。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"SpeechCorrectionList"` [1] | 誤って認識された単語の使用可能な訂正リストを表示します。 | `APPCOMMAND_CORRECTION_LIST` |  |  |  |
| `"SpeechInputToggle"` [2] | ディクテーションモードとコマンド/コントロールモードを切り替えます。これにより発話エンジンは、発話された言葉を入力テキストとして解釈するか、コマンドとして解釈するかを知ることができます。 | `APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE` |  |  |  |

[1] Windows の `APPCOMMAND_CORRECTION_LIST` コマンドは Firefox では `"Unidentified"` を生成します。

[2] Windows の `APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE` コマンドは Firefox 上で `"Unidentified"` を生成します。

文書キー
----

これらのキーは文書を制御します。仕様では、（メディアキーなど）他のキーの集合に記載されていますが、独自のカテゴリーに分類したほうが適切でしょう。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Close"` [1] | 現在の文書またはメッセージを閉じます。アプリケーションを終了してはいけません。 | `APPCOMMAND_CLOSE` |  | `GDK_KEY_Close` (0x1008FF56)`Qt::Key_Close`
 (0x010000CE)
  | `KEYCODE_MEDIA_CLOSE` (128) |
| `"New"` [1] | 新しい文書またはメッセージを作成します。 | `APPCOMMAND_NEW` |  | `GDK_KEY_New` (0x1008FF68)`Qt::Key_New`
 (0x01000120)
  |  |
| `"Open"` [1] | 既存の文書またはメッセージを開きます。 | `APPCOMMAND_OPEN` |  | `GDK_KEY_Open` (0x1008FF6B)`Qt::Key_Open`
 (0x01000121)
  |  |
| `"Print"` | 現在の文書またはメッセージを出力します。 | `APPCOMMAND_PRINT` |  | `GDK_KEY_Print` (0xFF61)`Qt::Print`
 (0x01000009)
  |  |
| `"Save"` [1] | 現在の文書またはメッセージを保存します。 | `APPCOMMAND_SAVE` |  | `GDK_KEY_Save` (0x1008FF77)`Qt::Key_Save`
 (0x010000EA)
  |  |
| `"SpellCheck"` [1] | 現在の文書のスペルチェックを開始します。 | `APPCOMMAND_SPELL_CHECK` |  | `GDK_KEY_Spell` (0x1008FF7C)`Qt::Key_Spell`
 (0x010000EC)
  |  |
| `"MailForward"` [1] | メッセージを転送するためのユーザーインターフェイスを開きます。 | `APPCOMMAND_FORWARD_MAIL` |  | `GDK_KEY_MailForward` (0x1008FF90)`Qt::Key_MailForward`
 (0x010000FB)
  |  |
| `"MailReply"` [1] | メッセージに返信するためのユーザーインターフェイスを開きます<。/td> | `APPCOMMAND_REPLY_TO_MAIL` |  | `GDK_KEY_Reply` (0x1008FF72)`Qt::Key_Reply`
 (0x010000E5)
  |  |
| `"MailSend"` [1] | 現在のメッセージを送信します。 | `APPCOMMAND_SEND_MAIL` |  | `GDK_KEY_Send` (0x1008FF7B)`Qt::Key_Send`
 (0x010000EB)
  |  |

[1] Firefox 37 より前のバージョンでは、このキーはキー値 `"Unidentified"` を生成していました。

アプリケーション選択キー
------------

キーボードによっては、特定のよく使うアプリケーションを起動したり切り替えたりするための特別なキーを備えているものもあります。それらのキー値はここに掲載されています。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"LaunchCalculator"` [5] | `計算機`キーで、よくアイコン表記になっています。これは汎用的なアプリケーション起動キー (`APPCOMMAND_LAUNCH_APP2`) としてよく使用されます。 | `APPCOMMAND_LAUNCH_APP2` |  | `GDK_KEY_Calculator` (0x1008FF1D)`Qt::Key_Calculator`
 (0x010000CB)
  | `KEYCODE_CALCULATOR` (210) |
| `"LaunchCalendar"` [5] | `カレンダー`キーで、よくアイコン表記になっています。 |  |  | `GDK_KEY_Calendar` (0x1008FF20)`Qt::Key_Calendar`
 (0x010000E4)
  | `KEYCODE_CALENDAR` (208) |
| `"LaunchContacts"` | `連絡先`キーです。 |  |  |  | `KEYCODE_CONTACTS` (207) |
| `"LaunchMail"` | `メール`キーです。よくアイコン表記になっています。 | `VK_LAUNCH_MAIL` (0xB4)`APPCOMMAND_LAUNCH_MAIL` |  | `GDK_KEY_Mail` (0x1008FF19)`Qt::Key_LaunchMail`
 (0x010000A0)
  | `KEYCODE_ENVELOPE` (65) |
| `"LaunchMediaPlayer"` [1] | `メディアプレイヤー`キーです。 | `VK_LAUNCH_MEDIA_SELECT` (0xB5)`APPCOMMAND_LAUNCH_MEDIA_SELECT` |  | `GDK_KEY_CD` (0x1008FF53)`GDK_KEY_Video`
 (0x1008FF87)`GDK_KEY_AudioMedia`
 (0x1008FF32)`Qt::Key_LaunchMedia` (0x010000A1)
  |  |
| `"LaunchMusicPlayer"` [5] | `音楽プレイヤー`キーです。よくアイコン表記になっています。 |  |  | `GDK_KEY_Music` (0x1008FF92)`Qt::Key_Music`
 (0x010000FD)
  | `KEYCODE_MUSIC` (209) |
| `"LaunchMyComputer"` [5] | Windows キーボードの`マイコンピューター`キーです。良く汎用のアプリケーション起動キー (`APPCOMMAND_LAUNCH_APP1`) として使われます。 | `APPCOMMAND_LAUNCH_APP1` |  | `GDK_KEY_MyComputer` (0x1008FF33)`GDK_KEY_Explorer`
 (0x1008FF5D)
  |  |
| `"LaunchPhone"` | `電話`キーです。（ある場合は）ダイヤラーアプリケーションを開きます。 |  |  | `GDK_KEY_Phone` (0x1008FF6E)`Qt::Key_Phone`
 (0x010000E3)
  |  |
| `"LaunchScreenSaver"` [5] | `スクリーンセーバー`キーです。 |  |  | `GDK_KEY_ScreenSaver` (0x1008FF2D)`Qt::Key_ScreenSaver`
 (0x010000BA)
  |  |
| `"LaunchSpreadsheet"` [4] | `スプレッドシート`キーです。アイコンで表記されているかもしれません。 |  |  | `GDK_KEY_Excel` (0x1008FF5C)`Qt::Key_Excel`
 (0x010000D4)
  |  |
| `"LaunchWebBrowser"` [4] | `ウェブブラウザー`キーです。よくアイコンで表記されています。 |  |  | `GDK_KEY_WWW` (0x1008FF2E)`Qt::Key_WWW`
 (0x010000BB)
  | `KEYCODE_EXPLORER` (64) |
| `"LaunchWebCam"` [5] | `ウェブカメラ`キーです。ウェブカメラアプリを開きます。 |  |  | `GDK_KEY_WebCam` (0x1008FF8F)`Qt::Key_WebCam`
 (0x010000FA)
  |  |
| `"LaunchWordProcessor"` [5] | `ワープロ`キーです。特定のワープロアプリのアイコンの場合も、一般の文書のアイコンの場合もあります。 |  |  | `GDK_KEY_Word` (0x1008FF89)`Qt::Key_Word`
 (0x010000F4)
  |  |
| `"LaunchApplication1"` [2] | 最初の汎用アプリケーション起動ボタン。 | `VK_LAUNCH_APP1` (0xB6)`APPCOMMAND_LAUNCH_APP1` |  | `GDK_KEY_Launch0` (0x1008FF40)`Qt::Key_Launch0`
 (0x010000A2)
  |  |
| `"LaunchApplication2"` [3] | 2 つ目の汎用アプリケーション起動ボタン。 | `VK_LAUNCH_APP2` (0xB7)`APPCOMMAND_LAUNCH_APP2` |  | `GDK_KEY_Launch1` (0x1008FF41)`Qt::Key_Launch1`
 (0x010000A3)
  |  |
| `"LaunchApplication3"` | 3 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch2` (0x1008FF42)`Qt::Key_Launch2`
 (0x010000A4)
  |  |
| `"LaunchApplication4"` | 4 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch3` (0x1008FF43)`Qt::Key_Launch3`
 (0x010000A5)
  |  |
| `"LaunchApplication5"` | 5 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch4` (0x1008FF44)`Qt::Key_Launch4`
 (0x010000A6)
  |  |
| `"LaunchApplication6"` | 6 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch5` (0x1008FF45)`Qt::Key_Launch5`
 (0x010000A7)
  |  |
| `"LaunchApplication7"` | 7 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch6` (0x1008FF46)`Qt::Key_Launch6`
 (0x010000A8)
  |  |
| `"LaunchApplication8"` | 8 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch7` (0x1008FF47)`Qt::Key_Launch7`
 (0x010000A9)
  |  |
| `"LaunchApplication9"` | 9 つ目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch8` (0x1008FF48)`Qt::Key_Launch8`
 (0x010000AA)
  |  |
| `"LaunchApplication10"` | 10 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_Launch9` (0x1008FF49)`Qt::Key_Launch9`
 (0x010000AB)
  |  |
| `"LaunchApplication11"` | 11 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchA` (0x1008FF4A)`Qt::Key_LaunchA`
 (0x010000AC)
  |  |
| `"LaunchApplication12"` | 12 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchB` (0x1008FF4B)`Qt::Key_LaunchB`
 (0x010000AD)
  |  |
| `"LaunchApplication13"` | 13 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchC` (0x1008FF4C)`Qt::Key_LaunchC`
 (0x010000AE)
  |  |
| `"LaunchApplication14"` | 14 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchD` (0x1008FF4D)`Qt::Key_LaunchD`
 (0x010000AF)
  |  |
| `"LaunchApplication15"` | 15 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchE` (0x1008FF4E)`Qt::Key_LaunchE`
 (0x010000B0)
  |  |
| `"LaunchApplication16"` | 16 番目の汎用アプリケーション起動ボタン。 |  |  | `GDK_KEY_LaunchF` (0x1008FF4F)`Qt::Key_LaunchF`
 (0x010000B1)
  |  |

[1] 古い Edge と Firefox （36 以前）は `"LaunchMediaPlayer"` の代わりに `"SelectMedia"` を使用します。 Firefox 37 から Firefox 48 では `"MediaSelect"` を使用します。 Firefox 49 は最新の仕様に適合し、`"LaunchMediaPlayer"` を返すように更新されました。

[2] Google Chrome 57 以前では、`"LaunchApplication1"` の代わりに `"LaunchMyComputer"` を返していました。詳しくは Chrome Bug 612743 を参照してください。

[3] Google Chrome 57 以前は `"LaunchApplication2"` の代わりに `"LaunchCalculator"` を返していました。詳しくは Chrome Bug 612743 を参照してください。

[4] Firefox 37 より前の Firefox では、ウェブブラウザのキーは "`LaunchWebBrowser"` ではなく `"LaunchApplication1"` というキーコードを返していました。

[5] Firefox は Firefox 37 でこのキーに対応しました。それ以前は、このキーは `"Unidentified"` として報告されていました。

ブラウザー制御キー
---------

キーボードによっては、ウェブブラウザを制御するための特別なキーが記載されています。それらのキーは以下に続きます。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"BrowserBack"` | 現在のウェブビューの履歴において、前にコンテンツまたはページに移動します。 | `VK_BROWSER_BACK` (0xA6)`APPCOMMAND_BROWSER_BACKWARD` |  | `GDK_KEY_Back` (0x1008FF26)`Qt::Key_Back`
 (0x01000061)
  | `KEYCODE_BACK` (4) |
| `"BrowserFavorites"` [1] | ユーザーのブックマーク/お気に入りリストを開きます。 | `VK_BROWSER_FAVORITES` (0xAB)`APPCOMMAND_BROWSER_FAVORITES` |  | `GDK_KEY_Favorites` (0x1008FF30)`GDK_KEY_MySites`
 (0x1008FF67)`Qt::Favorites` (0x01000091)
  | `KEYCODE_BOOKMARK` (174) |
| `"BrowserForward"` | 現在のウェブビューの履歴において、次のコンテンツまたはページに移動します。 | `VK_BROWSER_FORWARD` (0xA7)`APPCOMMAND_BROWSER_FORWARD` |  | `GDK_KEY_Forward` (0x1008FF27)`Qt::Key_Forward`
 (0x01000062)
  | `KEYCODE_FORWARD` (125) |
| `"BrowserHome"` | ユーザーの選択したホームページに移動します。 | `VK_BROWSER_HOME` (0xAC)`APPCOMMAND_BROWSER_HOME` |  | `GDK_KEY_HomePage` (0x1008FF18)`Qt::Key_HomePage`
 (0x01000090)
  | `KEYCODE_HOME` (3) |
| `"BrowserRefresh"` | 現在のページまたはコンテンツを更新します。 | `VK_BROWSER_REFRESH` (0xA8)`APPCOMMAND_BROWSER_REFRESH` |  | `GDK_KEY_Refresh` (0x1008FF29)`GDK_KEY_Reload`
 (0x1008FF73)
  |  |
| `"BrowserSearch"` | ユーザーの選択した検索エンジンまたはブラウザー内の検索インターフェイスを有効にします。 | `VK_BROWSER_SEARCH` (0xAA)`APPCOMMAND_BROWSER_SEARCH` |  | `GDK_KEY_Search` (0x1008FF1B)`Qt::Key_Search`
 (0x01000092)
  | `KEYCODE_SEARCH` (84) |
| `"BrowserStop"` | 現在表示しているウェブビューまたはコンテンツの読み込みを停止します。 | `VK_BROWSER_STOP` (0xA9)`APPCOMMAND_BROWSER_STOP` |  | `GDK_KEY_Stop` (0x1008FF28)`Qt::Key_Search`
 (0x01000063)
  |  |

[1] Firefox 37 より前のバージョンでは、このキーの値は `"Unidentified"` と報告されていました。

テンキーのキー
-------

これらのキーはキーボードのテンキーにあります。しかし、すべてがすべてのキーボードに存在するわけではありません。一般的なテンキーには `0` から `9` までの数字キーがありますが（`"0"` から `"9"` までのエンコード方式）、マルチメディアキーボードの中には、それ以上の数字のために追加の数字キーがあるものもあります。

**メモ:** `10` キーが存在する場合、 `key` の値が `"0"` のイベントを生成します。

| `KeyboardEvent.key` 値 | 解説 | 仮想キーコード |
| --- | --- | --- |
| Windows | Mac | Linux | Android |
| `"Decimal"` [1]
非推奨
 | 小数点キー（地域により通常 `.` または `,`）。
新しいブラウザーでは、この値は10進数キーで生成された文字（この 2 文字のうちの 1 つ）になります。 [1] | `VK_DECIMAL` (0x6E) | `kVK_ANSI_KeypadDecimal` (0x41) | `GDK_KEY_KP_Decimal` (0xFFAE) | `KEYCODE_NUMPAD_DOT` (158) |
| `"Key11"` | 特定のメディアのテンキーに見られる `11` キー。 |  |  |  |  |
| `"Key12"` | 特定のメディアのテンキーに見られる `12` キー。 |  |  |  |  |
| `"Multiply"` [1]
非推奨
 | テンキーの乗算キー、`\*`。 | `VK_MULTIPLY` (0x6A) | `kVK_ANSI_KeypadMultiply` (0x43) | `GDK_KEY_KP_Multiply` (0xFFAA)`Qt::Key_Multiply`
 (0x0D7)
  | `KEYCODE_NUMPAD_MULTIPLY` (155) |
| `"Add"` [1]
非推奨
 | テンキーの加算キー、`+`。 | `VK_ADD` (0x6B) | `kVK_ANSI_KeypadPlus` (0x45) | `GDK_KEY_KP_Add` (0xFFAB) | `KEYCODE_NUMPAD_ADD` (157) |
| `"Clear"` | テンキーの`クリア`キー。 |  | `kVK_ANSI_KeypadClear` (0x47) | `GDK_KEY_Clear` (0xFF0B)`Qt::Key_Clear`
 (0x0100000B)
  | `KEYCODE_CLEAR` (28) |
| `"Divide"` [1]
非推奨
 | テンキーの除算キー、`/`。 | `VK_DIVIDE` (0x6F) | `kVK_ANSI_KeypadDivide` (0x4B) | `GDK_KEY_KP_Divide` (0xFFAF)`Qt::Key_Slash`
 (0x2F)
  | `KEYCODE_NUMPAD_DIVIDE` (154) |
| `"Subtract"` [1]
非推奨
 | テンキーの減算キー、`-`。 | `VK_SUBTRACT` (0x6D) | `kVK_ANSI_KeypadMinus` (0x4E) | `GDK_KEY_KP_Subtract` (0xFFAD) | `KEYCODE_NUMPAD_SUBTRACT` (156) |
| `"Separator"` [1] | テンキーの区切り文字。
（米国ではカンマですが、他の国ではピリオドになることがよくあります）。 | `VK_SEPARATOR` (0x6C) | `kVK_JIS_KeypadComma` (0x5F) | `GDK_KEY_KP_Separator` (0xFFAC) | `KEYCODE_NUMPAD_COMMA` (159) |
| `"0"` から `"9"` まで | テンキーの実際の数字キー。 | `VK_NUMPAD0` (0x60) - `VK_NUMPAD9` (0x69) | `kVK_Keypad0` (0x52) - `kVK_Keypad9` (0x5C) | `GDK_KEY_KP_0` (0xFFB0) - `GDK_KEY_KP_9` (0xFFB9) | `KEYCODE_NUMPAD_0` (144) -
 `KEYCODE_NUMPAD_9` (153)
  |

[1] 古いブラウザーでは `"Add"`、`"Decimal"`、`"Multiply"` などの言葉を使用していましたが、現代のブラウザーでは実際の文字（`"+"`, `"."`, `"*"` など）を使用しています。


getBBox() - Web API

getBBox()
=========

**`SVGGraphicsElement.getBBox()`** で、オブジェクトが収まる最小の矩形の座標を特定することができます。返される座標は、現在の SVG 空間、すなわち対象の要素に含まれる位置に関する属性すべてを適用した後の空間に従います。

メモ: `getBBox` は要素がまだレンダリングされていない場合でも、メソッドが呼び出されたときに実際の境界ボックスを返します。また、要素またはその親に適用される変換は無視します。

**メモ:** `getBBox` は `getBoundingClientRect()` とは異なる値を返します。後者はビューポートからの相対値を返します。

構文
--
```

let bboxRect = object.getBBox();
```

### 返値

返値は `SVGRect` オブジェクトで、境界ボックスを定義します。この値はその要素や親要素に適用された変形属性を無視したものです。

例
-

### HTML

```html
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
  <g id="group\_text\_1">
    <text x="5" y="16" transform="scale(2, 2)">Hello World!</text>
    <text x="8" y="32" transform="translate(0 20) scale(1.25 1)">
      Hello World Again!
    </text>
  </g>
  <!-- Shows BBox in green -->
  <rect id="rect\_1" stroke="#00ff00" stroke-width="3" fill="none"></rect>
  <!-- Shows BoundingClientRect in red -->
  <rect id="rect\_2" stroke="#ff0000" stroke-width="3" fill="none"></rect>
</svg>
```

### JavaScript

```js
var rectBBox = document.querySelector("#rect\_1");
var rectBoundingClientRect = document.querySelector("#rect\_2");
var groupElement = document.querySelector("#group\_text\_1");

var bboxGroup = groupElement.getBBox();
rectBBox.setAttribute("x", bboxGroup.x);
rectBBox.setAttribute("y", bboxGroup.y);
rectBBox.setAttribute("width", bboxGroup.width);
rectBBox.setAttribute("height", bboxGroup.height);

var boundingClientRectGroup = groupElement.getBoundingClientRect();
rectBoundingClientRect.setAttribute("x", boundingClientRectGroup.x);
rectBoundingClientRect.setAttribute("y", boundingClientRectGroup.y);
rectBoundingClientRect.setAttribute("width", boundingClientRectGroup.width);
rectBoundingClientRect.setAttribute("height", boundingClientRectGroup.height);
```

仕様書
---

| Specification |
| --- |
| Scalable Vector Graphics (SVG) 2 # \_\_svg\_\_SVGGraphicsElement\_\_getBBox |

関連情報
----

* getBBox in SVG Primer


PaymentRequest: paymentmethodchange イベント - Web API

PaymentRequest: paymentmethodchange イベント
========================================

**`paymentmethodchange`** は決済リクエスト API のイベントで、ユーザーが指定された決済ハンドラーで決済手段を変更したときに `PaymentRequest` オブジェクトに配信されます。

例えば、ユーザーが Apple Pay のアカウントでクレジットカードを別のものに切り替えた場合、その変更を知らせるために `paymentmethodchange` イベントが発行されます。

このイベントはキャンセル不可で、バブリングしません。

構文
--

このイベント名を `addEventListener()` のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

```js
addEventListener("paymentmethodchange", (event) => {});

onpaymentmethodchange = (event) => {};
```

イベント型
-----

`PaymentMethodChangeEvent` です。`Event` から継承しています。

Event

PaymentRequestUpdateEvent

PaymentMethodChangeEventイベントプロパティ
---------

*以下のプロパティに加えて、このインターフェイスは `PaymentRequestUpdateEvent` からプロパティを継承しています。*

`methodDetails` (en-US) 読取専用  安全なコンテキスト用

決済方法の変更を処理する際に有益な、決済方法固有のデータを含むオブジェクト。そのような情報が利用できない場合、この値は `null` となります。

`methodName` (en-US) 読取専用  安全なコンテキスト用

決済手段識別子を格納した文字列で、具体的な決済手段を一意に識別するための文字列です。この識別子は通常、決済プロセスで使用する URL ですが、`basic-card` のような標準的な非 URL 文字列であってもかまいません。既定値は空文字列の `""` です。

例
-

例をみていきましょう。このコードでは、新しい `PaymentRequest` を作成し、リクエストの `addEventListener()` を呼び出して `paymentmethodchange` イベントのハンドラーを追加し、次に `show` を呼び出してユーザーに決済インターフェイスを表示します。

このコードは、`detailsForShipping()` というメソッドが存在し、`ground` という配送方法の配送オプションを `PaymentShippingOption` 辞書に得られる形式で格納したオブジェクトを返すことを想定しています。このようにすることで、決済フォームでは ground 配送手段が既定値となります。

```js
const options = {
  requestShipping: true,
};

const paymentRequest = new PaymentRequest(
  paymentMethods,
  detailsForShipping("ground"),
  options,
);

paymentRequest.addEventListener(
  "paymentmethodchange",
  handlePaymentChange,
  false,
);

paymentRequest
  .show()
  .then((response) => response.complete("success"))
  .catch((err) => console.error(`Error handling payment request: ${err}`));
```

イベントハンドラー関数そのものである `handlePaymentChange()` は、次のようなものです。

```js
handlePaymentChange = (event) => {
  const detailsUpdate = {};

  if (event.methodName === "https://apple.com/apple-pay") {
    const serviceFeeInfo = calculateServiceFee(event.methodDetails);
    Object.assign(detailsUpdate, serviceFeeInfo);
  }

  event.updateWith(detailsUpdate);
};
```

まず、イベントの `methodName` (en-US) プロパティを見ます。ユーザーが Apple Pay を使用しようとしていることが示された場合、 `methodDetails` (en-US) を `calculateServiceFee()` という関数に渡します。これは、Apple Pay リクエストをサービスするために用いられているクレジットカードなどの取引に関する情報を受け取るために作成される可能性があります。そして、決済手段が必要とするサービス料を追加するために `PaymentRequest` に適用する変更を指定するオブジェクトを計算し、返します。

イベントハンドラーが返す前に、イベントの `PaymentMethodChangeEvent.updateWith()` メソッドを呼び出して、リクエストに変更を統合します。

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # dfn-paymentmethodchange |
| Payment Request API 1.1 # onpaymentmethodchange-attribute |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 決済リクエスト API
* 決済リクエスト API の使用
* `merchantvalidation` イベント
* `payerdetailchange` イベント
* `shippingaddresschange` イベント
* `shippingoptionchange` イベント


PaymentRequest: canMakePayment() メソッド - Web API

PaymentRequest: canMakePayment() メソッド
=====================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

`PaymentRequest` の **`canMakePayment()`** メソッドは、ユーザーエージェントが対応している少なくとも一つの決済手段に対応した方法でリクエストが構成されているかどうかを判断します。

これを `show()` を呼び出す前に呼び出すと、ユーザーのブラウザーが受け入れる決済手段を処理できないときに、効率的なユーザー操作を提供することができます。

例えば、`canMakePayment()` を呼び出して、ブラウザーが決済リクエスト API を使ってユーザーに決済させるかどうかを判断し、もしそうでなければ、別の決済手段で代替するか、決済リクエスト API で処理しない方法のリストを提供する（あるいは、郵便や電話で支払う指示を出す）ことができるかもしれません。

構文
--

```js
canMakePayment()
```

### 引数

なし。

### 返値

`PaymentRequest` コンストラクターを使用してリクエストをインスタンス化する際に、ユーザーエージェントが提供した決済手段のいずれかに対応していれば `true` に解決する `Promise` を論理値に変換します．決済を処理できない場合、プロミスは `false` の値を受け取ります。

**メモ:** これを何度も呼び出すと、ブラウザーは返されるプロミスを `DOMException` で拒否するかもしれません。

例
-

次の例では、Apple Pay と Example Pay の両方に対応した `PaymentRequest` オブジェクトを非同期に構築する デモからの抜粋 があります。canMakePayment()`の呼び出しを機能検出でラップし、`Promise`の解像度に応じて適切なコールバックを呼び出しています。

```js
async function initPaymentRequest() {
  const details = {
    total: {
      label: "Total",
      amount: {
        currency: "USD",
        value: "0.00",
      },
    },
  };

  const supportsApplePay = new PaymentRequest(
    [{ supportedMethods: "https://apple.com/apple-pay" }],
    details,
  ).canMakePayment();

  // Supports Apple Pay?
  if (await supportsApplePay) {
    // show Apple Pay logo, for instance
    return;
  }

  // Otherwise, let's see if we can use Example Pay
  const supportsExamplePay = await new PaymentRequest(
    [{ supportedMethods: "https://example.com/pay" }],
    details,
  ).canMakePayment();

  if (supportsExamplePay) {
    // show Example Pay support
    return;
  }

  // Otherwise, make payments using HTML form element
}
```

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # dom-paymentrequest-canmakepayment |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `PaymentRequest.show()`


PaymentRequest: show() メソッド - Web API

PaymentRequest: show() メソッド
===========================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`PaymentRequest`** インターフェイスの **`show()`** メソッドは、ユーザーエージェントに対して、決済リクエストのためのユーザーインターフェイスをユーザーに示し、処理する処理を始めるように指示します。

すべての文書において、一度に処理することができる決済リクエストは 1 つだけです。一度 `PaymentRequest` の `show()` メソッドが呼び出されると、他の `show()` の呼び出しに対しては、返すプロミスが決済リクエストの結果を示す `PaymentResponse` (en-US) で履行されるか、エラーで拒否されるまで `AbortError` によって拒否されるようになります。

**メモ:** 現実には、詳細仕様ではできないことになっているにもかかわらず、Firefox を含むいくつかのブラウザーでは、一度に複数のアクティブな決済リクエストに対応しています。

アーキテクチャが `show()` を呼び出して決済インターフェイスをインスタンス化した時点で、必ずしもすべてのデータが準備できているとは限らない場合、`detailsPromise` 引数を指定して、データが準備できた時点で履行される `Promise` を提供します。これを指定された場合、`show()`はプロミスが履行されるまでユーザーが決済インターフェイスと対話することを許可しないので、ユーザーが決済プロセスに関与する前にデータを更新することができます。

結果を処理し、必要に応じて `PaymentResponse.retry()` (en-US) を呼び出して失敗した支払いを再試行することは、ニーズに応じて、すべて非同期または同期で行うことができます。良い使い勝手を得るためには、通常、非同期のソリューションが最適です。MDNや他の場所にあるほとんどの例では、`async`/`await` を使用して結果が検証されている間など非同期に待機します。

構文
--

```js
show()
show(detailsPromise)
```

### 引数

`detailsPromise` 省略可

オプションの `Promise` で、決済リクエストをインスタンス化してからユーザーが対話を始めるまでの間に、決済リクエストの詳細を更新する必要があることをアーキテクチャがリクエストされた場合に提供することができます。プロミスは、更新された情報を格納したオブジェクトで解決する必要があります。

`displayItems` 省略可

オブジェクトの配列で、それぞれが決済リクエストの 1 つの行を記述しています。これらは領収書や請求書の行を表し、それぞれ以下のプロパティを持ちます。

`amount`

アイテムの金銭的価値を記述しているオブジェクトです。このオブジェクトには、以下のフィールドが記載されます。

`currency`

文字列で、決済の `value` に使用する通貨を示す有効な 3 文字の ISO 4217 通貨識別子（ISO 4217）が入ります。

`value`

文字列で、決済額を構成する通貨の金額を表す有効な 10 進数値を格納したものです。この文字列は、負の値を示すオプションの先頭の "-" と、0 から 9 までの 1 桁以上の数字、そしてオプションの小数点（"."、ロケールに関係なく）と、少なくとも 1 桁以上の数字が続くものだけを格納しなければなりません。空白は許されません。

`label`

課金されるアイテムやサービスの、人間が読み取り可能な名称や説明を指定する文字列。インターフェイスのデザインによっては、ユーザーエージェントによってユーザーに表示されることもあります。

`pending`

指定した `amount` がまだ確定していない場合に `true` となる論理値を指定します。これは、配送先住所や配送オプションなどの選択に依存する送料や税金の金額などの項目を示すために使用することができます。ユーザーエージェントはこの情報を示すことができますが、そうする必要はありません。

`error` 省略可
非推奨

ユーザーに表示するエラーメッセージを指定します。`updateWith()` を呼び出すとき、更新データに `error` を記載すると、ユーザーエージェントに一般的なエラーメッセージとしてテキストを表示するようにします。アドレスフィールド固有のエラーについては、`shippingAddressErrors` を使用してください。

`modifiers` 省略可

`PaymentDetailsModifier` オブジェクトの配列で、それぞれ具体的な決済手段の識別子に対する変更点を記述しています。例えば、選択された決済手段に基づいて総支払額を調整するために使用することができます（「5% の現金割引！」）。

`shippingAddressErrors` 省略可
非推奨

配送先住所の各プロパティで検証できなかったエラーメッセージを含めることができる `AddressErrors` オブジェクト。

`shippingOptions` 省略可

`PaymentShippingOption` オブジェクトの配列。各オブジェクトは、ユーザーが選ぶことができる利用できる配送オプションの 1 つを記述します。

`total` 省略可

`displayItems` のオブジェクトと同じプロパティを持つオブジェクトで、決済のための更新された合計を提供します。これが `displayItems` のすべてのアイテムの合計と等しいことを確認してください。これは自動的に計算されるものではありません。決済の合計金額が変わるたびに、この値を自分で更新する必要があります。これにより、税金や割引、その他の請求金額の合計を調整するようなことを処理するための柔軟性を持つことができます。

### 返値

 最終的に `PaymentResponse` (en-US) で解決される `Promise` です。
 プロミスは、ユーザーが決済リクエストを受け入れると解決します（ブラウザーの決済シートの「Pay」ボタンをクリックするなど）。

### 例外

例外は発生せず、`Promise` が拒否されたときに返されます。

`AbortError` `DOMException`

ユーザーエージェント が既に決済パネルを表示している場合に返されます。ユーザーエージェントが読み込んだすべての文書において、一度に表示できる決済パネルは 1 つだけです。

ユーザーが決済リクエストをキャンセルした場合、プロミスは `AbortError` で拒否されます。

`InvalidStateError` `DOMException`

このリクエストに対して同じ決済が既に示されている場合（既に示されているため、その状態は `interactive` ）に返されます。

`NotSupportedError` `DOMException`

`PaymentRequest` コンストラクターが呼び出されたときに指定した決済手段にユーザーエージェントが対応していない場合に返します。

`SecurityError` `DOMException`

`show()` の呼び出しが、`click` または `keyup` イベントなどのユーザー操作に応答していない場合に、この値が返されます。他にも `SecurityError` が発生する理由はユーザーエージェントの判断によるもので、短時間に多くの `show()` を呼び出したり、ペアレンタルコントロールによって決済リクエストがブロックされているときに `show()` を呼び出したりするような状況を含むことがあります。

セキュリティ
------

単発のユーザー活性化が必要です。動作するためには、ユーザーがページや UI 要素と対話する必要があります。

使用上の注意
------

`show()` を使用するよくあるパターンは、`async`/`await` 構文を使用するか、レスポンスと拒否の可能性を処理するために `show().then().catch()` を使用しているかのいずれかです。それらは次のようにあります。

### async/await 構文

プロミスの解決を待つために `await` を使用すると、決済を処理するコードを特にきれいに書くことができる。

```js
async function processPayment() {
  try {
    const payRequest = new PaymentRequest(methodData, details, options);

    payRequest.onshippingaddresschange = (ev) =>
      ev.updateWith(checkAddress(payRequest));
    payRequest.onshippingoptionchange = (ev) =>
      ev.updateWith(checkShipping(payRequest));

    const response = await payRequest.show();
    await validateResponse(response);
  } catch (err) {
    /\* handle the error; AbortError usually means a user cancellation \*/
  }
}
```

このコードでは、`checkAddress()` メソッドと `checkShipping()` メソッドが、それぞれ配送先住所と配送オプションの変更を調べ、オブジェクトかそれを返すプロミスをレスポンスとして与えます。このオブジェクトには、`PaymentResponse` (en-US) 内の変更したまたは変更する必要があるフィールドを格納します。

下記の `validateResponse()` メソッドは、`show()` が返されると呼び出され、返された `response` を見て、支払いを送信するか、失敗として支払いを拒否するかを決定するために使用されます。

```js
async function validateResponse(response) {
  try {
    if (await checkAllValues(response)) {
      await response.complete("success");
    } else {
      await response.complete("fail");
    }
  } catch (err) {
    await response.complete("fail");
  }
}
```

ここでは、`checkAllValues()` という独自の関数が `response` の各値を調べて、それらが有効であることを確実に保持し、すべてのフィールドが有効であれば `true`、有効でないものがあれば `false` を返します。すべてのフィールドが有効な場合のみ、`complete()` (en-US) メソッドが文字列 `"success"` を伴ってレスポンスに呼び出され、すべてが有効であることを示し、それに応じて決済を完了できるようにします。

許容できない値があるフィールドがある場合、または前回のコードで例外が発生した場合は、`complete()`が文字列 `"fail"` で呼び出され、決済処理が完了し、失敗したことを示します。

すぐに失敗する代わりに、レスポンスオブジェクトに `retry()` (en-US) を呼び出して、ユーザーエージェントに決済処理のやり直しを依頼することもできます。これは通常、ユーザーが注文に必要な修正を行った後にのみ行われるべきです。

決済処理を始めるには、結局のところ `processPayment()` メソッドを呼び出すだけでよいのです。

### then/catch 構文

また、旧来のプロミスベースの手法で決済を作業することもでき、`show()`が返すプロミスに対して `then()` と `catch()` 関数を使用します。

```js
function processPayment() {
  const payRequest = new PaymentRequest(methodData, details, options);

  payRequest.onshippingaddresschange = (ev) =>
    ev.updateWith(checkAddress(payRequest));
  payRequest.onshippingoptionchange = (ev) =>
    ev.updateWith(checkShipping(payRequest));

  payRequest
    .show()
    .then((response) => validateResponse(response))
    .catch((err) => handleError(err));
}
```

これは、`await` 構文を使用した `processPayment()` メソッドと機能的に同等です。

```js
function validateResponse(response) {
  checkAllValues(response)
    .then((response) => response.complete("success"))
    .catch((response) => response.complete("fail"));
}
```

`checkAllValues()` を同期関数とすることもできますが、その場合、パフォーマンス上、避けたい影響があるかもしれません。

```js
function validateResponse(response) {
  if (checkAllValues(response)) {
    response.complete("success");
  } else {
    response.complete("fail");
  }
}
```

プロミスの動作についてより詳しい情報が必要な場合は、プロミスの使用の記事を参照してください。

例
-

次の例では、`show()` メソッドが呼び出される前に `PaymentRequest` オブジェクトがインスタンス化されています。このメソッドは、ユーザーから決済情報を取得するためのユーザーエージェントの組み込み処理を発生させます。`show()` メソッドは、ユーザーとの対話が完了すると `Promise` を返して `PaymentResponse` (en-US) オブジェクトに解決する。その後、開発者は `PaymentResponse` オブジェクトの情報を使用して、決済データを形式化してサーバーに送信します。決済情報を非同期にサーバに送信して、`paymentResponse.complete()` (en-US) の最後の呼び出しで決済の成功・失敗を示すことができるようにする必要があります。

```js
button.onclick = async function handlePurchase() {
  // Initialization of PaymentRequest arguments are excerpted for the sake of
  // brevity.
  const payment = new PaymentRequest(methods, details, options);
  try {
    const response = await payment.show();
    // Process response here, including sending payment instrument
    // (e.g., credit card) information to the server.
    // paymentResponse.methodName contains the selected payment method
    // paymentResponse.details contains a payment method specific response
    await response.complete("success");
  } catch (err) {
    console.error("Uh oh, something bad happened", err.message);
  }
};
```

次の例は、エンドユーザーを説明しているときに決済シートを更新する方法を示しています。

```js
async function requestPayment() {
  // We start with AU$0 as the total.
  const initialDetails = {
    total: {
      label: "Total",
      amount: { value: "0", currency: "AUD" },
    },
  };
  const request = new PaymentRequest(methods, initialDetails, options);
  // Check if the user supports the `methods`
  if (!(await request.canMakePayment())) {
    return; // no, so use a web form instead.
  }
  // Let's update the total as the sheet is shown
  const updatedDetails = {
    total: {
      label: "Total",
      amount: { value: "20", currency: "AUD" },
    },
  };
  const response = await request.show(updatedDetails);
  // Check response, etc.
}

document.getElementById("buyButton").onclick = requestPayment;
```

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # dom-paymentrequest-show |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 決済リクエスト API
* 決済リクエスト API の使用
* `PaymentRequest.abort()`
* `PaymentRequest.retry()`
* `PaymentRequest.complete()`
* `PaymentResponse` (en-US)


PaymentRequest: PaymentRequest() コンストラクター - Web API

PaymentRequest: PaymentRequest() コンストラクター
=========================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`PaymentRequest()`** コンストラクターは、決済リクエストの生成、検証、送信の処理を行うために使用する新しい `PaymentRequest` オブジェクトを作成します。

構文
--

```js
new PaymentRequest(methodData, details)
new PaymentRequest(methodData, details, options)
```

### 引数

`methodData`

販売者ウェブサイトが受け入れる決済手段の識別子と、関連する決済手段固有のデータを格納する配列です。配列の各項目には以下のフィールドが含まれます。

`supportedMethods`

この仕様の初期の実装では、これは販売者のウェブサイトが受け入れる決済手段の識別子の列でした。最近のブラウザーでは、この引数はクレジットカードよりも一般的で、単一の文字列であり、`data` 引数の意味は `supportedMethods` によって変化します。例えば、Example Pay の決済手段は、ここに文字列 `https://example.com/pay` を指定することで選択されます。

`data`

対応している決済手段が必要とするかもしれないオプション情報を提供する JSON シリアライズ可能なオブジェクトです。これは `supportedMethods` で示す決済ハンドラーが期待する種類に適合していなければなりません。。開発者は、データオブジェクトの期待される形について、決済手段の管理者に相談する必要があります。

`details`

リクエストされたトランザクションに関する情報を提供する。この引数には以下のフィールドが含まれます。

`total`

決済リクエストのための合計金額です。

`id` 省略可

この決済リクエストのための自由形式の識別子。値が与えられなかった場合、ブラウザーは値を作成します。

`displayItems`

ユーザーエージェントが表示することができる決済リクエストのオプション行項目（商品詳細、税金、送料など）の配列。

`shippingOptions`

ユーザーが選ぶことのできる配送オプションです。この配列が空の場合、販売者は現在の配送先住所に配送できないことを示す。既定値の配送オプションは、この配列で示すことができます。

`modifiers`

特定の決済手段に対する変更仕様です。例 えば、決済のための合計金額を決済手段に基づいて調整することです。このパラメータには、以下のフィールドが格納されます。

`additionalDisplayItems`

`details.displayItems` プロパティに追加する項目の配列です。このプロパティは、`details.modifiers.total` で異なる金額を示す割引または割増料金の行を追加するために一般的に使用されます。

`data`

対応している決済手段で必要と思われるオプション情報を提供する JSON シリアライズ可能なオブジェクトです。

`total`

details.total の値を上書きする、決済リクエストのための合計金額です。これは通常、`details.modifiers.additionalItems` がリクエストに割引や購入を追加するときに使用します。

`options` 省略可

ユーザーエージェントの動作を制御するオプションを設定することができます。この引数には、以下のフィールドが含まれます。

`requestPayerName`

ユーザーエージェントが支払者の名前を収集し、決済リクエストと一緒に送信するかどうかを示す論理値です。既定値は `false` です。

`requestPayerEmail`

ユーザーエージェントが支払者の電子メールアドレスを収集し、決済リクエストと一緒に送信するかどうかを示す論理値です。既定値は `false` です。

`requestPayerPhone`

ユーザーエージェントが支払者の電話番号を収集し、決済リクエストと一緒に送信するかどうかを示す論理値です。既定値は `false` です。

`requestShipping`

ユーザーエージェントが支払者の配送先住所を収集し、決済リクエストと一緒に送信するかどうかを示す論理値です。この型を true に設定した場合、適切な `shippingType` を選択する必要があります。既定値は `false` です。

`shippingType`

 使用する用途によって「配送」という言葉が適切でない場合に、ユーザーインターフェイスがどのように配送を参照するかを指定します。例えば、英語圏では "pizza shipping" ではなく "pizza delivery" と言います。有効な値は、`"shipping"`、`"delivery"`、`"pickup"` です。
 引用符は必ず含める必要があります。既定値は `"shipping"` です。

### 返値

新しい`PaymentRequest`オブジェクトで、入力引数によって設定された通りの用途で使用するように構成されています。

### Exceptions

`SecurityError` `DOMException`

この機能を使用することが、権限ポリシーによってブロックされている。

例
-

次の例は、最小限の機能を示し、代わりに `PaymentRequest` オブジェクトをインスタンス化する際の完全なコンテキストを示すことに重点を置いています。

```js
const supportedInstruments = [
  {
    supportedMethods: "https://example.com/pay",
  },
];

const details = {
  total: { label: "Donation", amount: { currency: "USD", value: "65.00" } },
  displayItems: [
    {
      label: "Original donation amount",
      amount: { currency: "USD", value: "65.00" },
    },
  ],
  shippingOptions: [
    {
      id: "standard",
      label: "Standard shipping",
      amount: { currency: "USD", value: "0.00" },
      selected: true,
    },
  ],
};

const options = { requestShipping: true };

try {
  const request = new PaymentRequest(supportedInstruments, details, options);
  // Add event listeners here.
  // Call show() to trigger the browser's payment flow.
  request
    .show()
    .then((instrumentResponse) => {
      // Do something with the response from the UI.
    })
    .catch((err) => {
      // Do something with the error from request.show().
    });
} catch (e) {
  // Catch any other errors.
}
```

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # constructor |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: shippingoptionchange イベント - Web API

PaymentRequest: shippingoptionchange イベント
=========================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**非標準:** この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

配送情報を要求し、配送オプションが提供されている決済リクエストでは、ユーザーが利用できるオプションのリストから配送オプションを選ぶと、**`shippingoptionchange`** イベントが `PaymentRequest` に送られます。

現在選択されている配送オプションを特定する文字列は、`shippingOption`プロパティで得ることができます。

このイベントはキャンセル不可で、バブリングしません。

構文
--

このイベント名を `addEventListener()` のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

```js
addEventListener("shippingoptionchange", (event) => {});

onshippingoptionchange = (event) => {};
```

イベント型
-----

`PaymentRequestUpdateEvent` です。`Event` から継承しています。

Event

PaymentRequestUpdateEventイベントプロパティ
---------

*`Event` から継承したプロパティのみを提供しています。*

例
-

このコードでは、`shippingoptionchange` イベントに対するハンドラーを設定します。このコードは、選択された配送オプションに基づいて決済の合計料金を再計算します。例えば、3 つのオプション（"Free ground shipping", "2-day air", "Next day" など）がある場合、ユーザーがそれらのオプションを選ぶたびに、このイベントハンドラーが呼ばれて、変更された配送オプションに基づいて合計金額が再計算されます。

```js
paymentRequest.addEventListener(
  "shippingoptionchange",
  (event) => {
    const value = calculateNewTotal(paymentRequest.shippingOption);
    const total = {
      currency: "EUR",
      label: "Total due",
      value,
    };
    event.updateWith({ total });
  },
  false,
);
```

カスタム関数 `calculateNewTotal()` を呼び出して、`shippingOption` で指定した新しく選択された配送オプションに基づいて更新後の合計を算出した後。イベントの `updateWith()` メソッドを呼び出すことにより、改訂後の合計が決済リクエストに返されます。

`shippingoptionchange` のイベントハンドラーは、対応するイベントハンドラープロパティである `onshippingoptionchange` を使用して作成することもできます。

```js
paymentRequest.onshippingoptionchange = (event) => {
  const value = calculateNewTotal(paymentRequest.shippingOption);
  const total = {
    currency: "EUR",
    label: "Total due",
    value,
  };
  event.updateWith({ total });
};
```

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: shippingOption プロパティ - Web API

PaymentRequest: shippingOption プロパティ
====================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**非標準:** この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

**`shippingOption`** は `PaymentRequest` インターフェイスの読み取り専用プロパティで、これは、選択された配送オプションの id、null（選択する配送オプションが設定されていない場合）、またはユーザーによって選択された配送オプションのいずれかを返します。「選択された」配送オプションが提供されていない場合、最初は `null` です。

この属性は、コンストラクターが `requestShipping` フラグを `true` に設定して呼び出された場合にのみ設定されます。`requestShipping` が `false` である（または見つからない）場合、たとえ開発者が選択した配送オプションを提供したとしても、 `shippingOption` は `null` を返します。

値
-

例
-

下記の例では、`shippingaddresschange` および `shippingoptionchange` イベントが配信されます。それぞれが `updateDetails()` が呼び出し、1 つはプロミスを用いており、もう 1 つはプレーンな JS オブジェクトを用いています。これは、決済シートの同期と非同期の更新を示すものです。

```js
const request = new PaymentRequest(methodData, details, options);
// Async update to details
request.onshippingaddresschange = (ev) => {
  ev.updateWith(checkShipping(request));
};
// Sync update to the total
request.onshippingoptionchange = (ev) => {
  const shippingOption = shippingOptions.find(
    (option) => option.id === request.id,
  );
  const newTotal = {
    currency: "USD",
    label: "Total due",
    value: calculateNewTotal(shippingOption),
  };
  ev.updateWith({ ...details, total: newTotal });
};
async function checkShipping(request) {
  try {
    const json = request.shippingAddress.toJSON();

    await ensureCanShipTo(json);
    const { shippingOptions, total } = await calculateShipping(json);

    return { ...details, shippingOptions, total };
  } catch (err) {
    return { ...details, error: `Sorry! we can't ship to your address.` };
  }
}
```

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: abort() メソッド - Web API

PaymentRequest: abort() メソッド
============================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

`PaymentRequest.abort()` は `PaymentRequest` インターフェイスのメソッドで、ユーザーエージェントに決済リクエストを終了させ、ユーザーインターフェイスが表示された場合は消去します。

構文
--

```js
abort()
```

### 引数

なし。

### 返値

なし (`undefined`)。

例
-

次の例では、放棄または放置された可能性のある決済リクエストをクリアするためのタイムアウトを設定しています。

```js
const request = new PaymentRequest(supportedInstruments, details, options);

const paymentTimeout = setTimeout(
  () => {
    clearTimeout(paymentTimeout);
    request
      .abort()
      .then(() => {
        print("Payment timed out after 20 minutes.");
      })
      .catch(() => {
        print(
          "Unable to abort, because the user is currently in the process " +
            "of paying.",
        );
      });
  },
  20 \* 60 \* 1000,
); /\* 20 minutes \*/
```

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # dom-paymentrequest-abort |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `PaymentRequest.abort()`


PaymentRequest: shippingType プロパティ - Web API

PaymentRequest: shippingType プロパティ
==================================

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**非標準:** この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

**`shippingType`** は `PaymentRequest` インターフェイスの読み取り専用プロパティで、`"shipping"`、`"delivery"`、`"pickup"` の何れか、またはコンストラクターで提供されていなかった場合は `null` を返します。

値
-

`"shipping"`、`"delivery"`、`"pickup"`、`null` の何れかです。

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: id プロパティ - Web API

PaymentRequest: id プロパティ
========================

**`id`** は `PaymentRequest` インターフェイスの読み取り専用プロパティで、特定の `PaymentRequest` インスタンスに固有の識別子を返します。

`PaymentRequest` のインスタンスを構築する際に、独自の id を指定することが可能です。指定されなかった場合、ブラウザーは自動的に id 値を UUID に設定します。

例
-

この例は、`PaymentRequest` インスタンスに独自の ID を付与する方法を示します。

```js
const details = {
  id: "super-store-order-123-12312",
  total: {
    label: "Total due",
    amount: { currency: "USD", value: "65.00" },
  },
};
const request = new PaymentRequest(methodData, details);
console.log(request.id); // super-store-order-123-12312
```

 The `id` is then also available in the `PaymentResponse` (en-US)
 returned from the `show()` method, but under the `requestId`
 attribute.

```js
const response = await request.show();
console.log(response.requestId === request.id);

// And in serialized form too
const json = response.toJSON();
console.log(json.requestId, response.requestId, request.id);
```

値
-

文字列です。

仕様書
---

| Specification |
| --- |
| Payment Request API 1.1 # dom-paymentrequest-id |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: merchantvalidation イベント - Web API

PaymentRequest: merchantvalidation イベント
=======================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**`merchantvalidation`** イベントは決済リクエスト API によって、決済ハンドラーが、購入をリクエストされた販売者が、決済ハンドラーを使用することが許可されていることを確認することを要求する場合に `PaymentRequest` オブジェクトへ配信されます。

どのように販売者検証のプロセスが動作するのかを知ってください。

このイベントはキャンセル不可で、バブリングしません。

構文
--

このイベント名を `addEventListener()` のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

```js
addEventListener("merchantvalidation", (event) => {});

onmerchantvalidation = (event) => {};
```

イベント型
-----

`MerchantValidationEvent` (en-US) です。`Event` から継承しています。

イベントプロパティ
---------

`MerchantValidationEvent.methodName` (en-US) 安全なコンテキスト用

検証を必要とする決済ハンドラーの固有の決済手段識別子を提供する文字列です。これは標準の決済ハンドラーの識別子文字列か、`https://apple.com/apple-pay` のような決済ハンドラーを識別しリクエストを処理するURLのいずれかである可能性があります。

`MerchantValidationEvent.validationURL` (en-US) 安全なコンテキスト用

サイトやアプリが決済ハンドラー固有の検証情報を取得するための URL を指定する文字列です。このデータを取得したら、そのデータ（または検証データを解決するプロミス）を `complete()` (en-US) に渡して、決済リクエストが認可された販売者から来ていることを検証しなければなりません。

例
-

この例では、`mercantvalidation` イベントに対してイベントハンドラーを確立している。これは `fetch()` を用いて、イベントの `validationURL` (en-US) プロパティから取得した決済手段の検証用 URL を引数に持つリクエストを自分自身でサーバーに送信します。販売者サーバーは、決済手段のドキュメント内の検証 URL にアクセスする必要があります。通常、クライアントは検証 URL にアクセスすべきではありません。

```js
request.addEventListener("merchantvalidation", (event) => {
  event.complete(async () => {
    const merchantServerUrl = `${
 window.location.origin
 }/validate?url=${encodeURIComponent(event.validationURL)}`;
    // get validation data, and complete validation;
    return await fetch(merchantServerUrl).then((response) => response.text());
  }, false);
});

const response = await request.show();
```

販売者サーバーがどのように検証を処理するかは、サーバーの実装と決済手段のドキュメントに依存します。検証サーバーから配信されたコンテンツは販売者サーバーに転送され、`fetch()` 呼び出しの履行ハンドラーからイベントの `complete()` (en-US) メソッドに返されます。このレスポンスにより、決済ハンドラーは販売者が検証されたかどうかを知ることができます。

また、`onmerchantvalidation` イベントハンドラプロパティを使用して、このイベントのハンドラーを設定することができます。

```js
request.onmerchantvalidation = (event) => {
  event.complete(async () => {
    const merchantServerUrl = `${
 window.location.origin
 }/validate?url=${encodeURIComponent(event.validationURL)}`;
    // get validation data, and complete validation;
    return await fetch(merchantServerUrl).then((response) => response.text());
  });
};

const response = await request.show();
```

詳しくは、販売者検証を参照してください。

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 決済リクエスト API
* 決済リクエスト API の使用
* `onmerchantvalidation` イベントハンドラープロパティ
* 販売者検証
* `PaymentRequest`
* `payerdetailchange` イベント
* `paymentmethodchange` イベント
* `shippingaddresschange` イベント
* `shippingoptionchange` イベント


PaymentRequest: shippingaddresschange イベント - Web API

PaymentRequest: shippingaddresschange イベント
==========================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**非標準:** この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

**`shippingaddresschange`** イベントは、ユーザーが配送先を選択したとき、または配送先の詳細を変更したときに `PaymentRequest` オブジェクトに送られます。

このイベントはキャンセル不可で、バブリングしません。

構文
--

このイベント名を `addEventListener()` のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

```js
addEventListener("shippingaddresschange", (event) => {});

onshippingaddresschange = (event) => {};
```

イベント型
-----

`PaymentRequestUpdateEvent` です。`Event` から継承しています。

Event

PaymentRequestUpdateEventイベントプロパティ
---------

*`Event` から継承したプロパティのみを提供しています。*

使用上の注意
------

ブラウザーによっては、プライバシー保護のため、配送先情報が編集される場合があります。つまり、配送先住所を含む `PaymentAddress` は、ユーザーの同意なしにユーザーを特定できないようにするために、そのコンテンツの一部が変更、不明瞭化、または完全に削除されることがあります（ユーザーが商品を発送することを選んだ場合は、その住所が必要になるため）。

例
-

この例では、`shippingaddresschange` イベントのハンドラーを設定して、住所がウェブアプリケーションが設定した要件を満たしているかどうかを検証しています。

```js
const paymentRequest = new PaymentRequest(methodData, details, options);

paymentRequest.addEventListener(
  "shippingaddresschange",
  (event) => {
    let detailsUpdate = checkAddress(paymentRequest.shippingAddress);
    event.updateWith(detailsUpdate);
  },
  false,
);

const checkAddress = (theAddress) => {
  let detailsUpdate = {};

  // Check the address, return an object with any changes or errors.

  return detailsUpdate;
};
```

`shippingaddresschange` のハンドラーは、`onshippingaddresschange` イベントハンドラープロパティを用いて確立することもできます。

```js
paymentRequest.onshippingaddresschange = (event) => {
  let detailsUpdate = checkAddress(paymentRequest.shippingAddress);
  event.updateWith(detailsUpdate);
};
```

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


PaymentRequest: shippingAddress プロパティ - Web API

PaymentRequest: shippingAddress プロパティ
=====================================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**非標準:** この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

**`shippingAddress`** は `PaymentRequest` インターフェイスの読み取り専用プロパティで、ユーザーから指定された配送先住所を返します。既定値は `null` です。

値
-

 一般的に、ユーザーエージェントは `shippingAddress` プロパティ値を埋めます。
 これは、`PaymentRequest`コンストラクターを呼び出すときに `PaymentOptions.requestShipping` を `true` に設定することで行うことができます。

例
-

下記の例では、送料が地域によって異なります。`shippingaddresschange` が呼び出されると、`updateDetails()` が呼び出されて `PaymentRequest` の詳細を更新し、`shippingAddress` を使用して正しい送料を設定します。

```js
// Initialization of PaymentRequest arguments are excerpted for the sake of
// brevity.
const payment = new PaymentRequest(supportedInstruments, details, options);

payment.addEventListener("shippingaddresschange", (evt) => {
  evt.updateWith(
    new Promise((resolve) => {
      updateDetails(details, request.shippingAddress, resolve);
    }),
  );
});

payment
  .show()
  .then((paymentResponse) => {
    // Processing of paymentResponse excerpted for brevity.
  })
  .catch((err) => {
    console.error("Uh oh, something bad happened", err.message);
  });

function updateDetails(details, shippingAddress, resolve) {
  if (shippingAddress.country === "US") {
    const shippingOption = {
      id: "",
      label: "",
      amount: { currency: "USD", value: "0.00" },
      selected: true,
    };
    if (shippingAddress.region === "MO") {
      shippingOption.id = "mo";
      shippingOption.label = "Free shipping in Missouri";
      details.total.amount.value = "55.00";
    } else {
      shippingOption.id = "us";
      shippingOption.label = "Standard shipping in US";
      shippingOption.amount.value = "5.00";
      details.total.amount.value = "60.00";
    }
    details.displayItems.splice(2, 1, shippingOption);
    details.shippingOptions = [shippingOption];
  } else {
    delete details.shippingOptions;
  }
  resolve(details);
}
```

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


Crypto: subtle プロパティ - Web API

Crypto: subtle プロパティ
====================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`Crypto.subtle`** 読み取り専用プロパティは、低水準の暗号化操作をができる `SubtleCrypto` オブジェクトを返します。

値
-

ウェブ暗号 API の低レベル暗号機能を操作するために使用できる `SubtleCrypto` オブジェクトです。

仕様書
---

| Specification |
| --- |
| Web Cryptography API # Crypto-attribute-subtle |

ブラウザーの実装状況
----------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `Crypto`
* `SubtleCrypto`
* Compatibility test page
* Shim for IE11 and Safari


Crypto: randomUUID() メソッド - Web API

Crypto: randomUUID() メソッド
=========================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`randomUUID()`** は `Crypto` インターフェイスのメソッドで、暗号強度の強い乱数生成器を用いて v4 UUID を生成するのに用いられます。

構文
--

```js
randomUUID()
```

### 引数

なし。

### 返値

ランダムに生成された 36 文字の v4 UUID を格納した文字列。

例
-

メソッドにグローバルの `crypto` プロパティを通してアクセスします。

```js
/\* self.crypto.randomUUID() が利用可能であることを仮定しています \*/

let uuid = self.crypto.randomUUID();
console.log(uuid); // 例えば "36b8f84d-df4e-4d49-b662-bcde71a8764f"
```

仕様書
---

| Specification |
| --- |
| Web Cryptography API # Crypto-method-randomUUID |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `Web Crypto API`
* `Crypto` オブジェクトを取得する `crypto`。
* `Crypto.getRandomValues` 任意の量の安全なランダムバイト列の生成源。


Crypto: getRandomValues() メソッド - Web API

Crypto: getRandomValues() メソッド
==============================

**`Crypto.getRandomValues()`** メソッドは、暗号強度の強い乱数値を取得します。
 引数で与えた配列は、すべて乱数で（暗号学的な意味でランダムに）埋められます。

 十分な性能を保証するために、実装は真に乱数発生器を使用しているのではないものの、十分なエントロピーを有する*シード値*を用いた擬似乱数発生器を使用しています。
 擬似乱数発生器アルゴリズム (PRNG) は、ユーザーエージェントによって異なる可能性がありますが、暗号化の目的には適しています。

`getRandomValues()` は `Crypto` インターフェイスで安全なコンテキスト外から使用することができる唯一のメンバーです。

構文
--

```js
getRandomValues(typedArray)
```

### 引数

`typedArray`

 整数値ベースの `TypedArray` です。 `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array` の何れかです（ただし `Float32Array` や `Float64Array` では**ありません**）。
 配列内のすべての要素は乱数で上書きされます。

### 返値

`typedArray` と同じ配列が渡されますが、その内容は新しく生成された乱数で置き換えられます。
 `typedArray` はその場で変更され、コピーは行われないことに注意してください。

### 例外

`QuotaExceededError` `DOMException`

`typedArray` の `byteLength` が 65,536 バイトを超えた場合に発生します。

使用上の注意
------

`getRandomValues()` を暗号鍵を生成するために使用しないでください。代わりに `generateKey()` メソッドを使用してください。
 これにはいくつかの理由があります。例えば、 `getRandomValues()` が安全なコンテキストで動作することが保証されていないことなどです。

 ウェブ暗号仕様書では、エントロピーの最小値は規定されていません。
 その代わり、ユーザーエージェントは乱数を生成する際に、ユーザーエージェント自身に組み込まれた、よく定義された効率的な擬似乱数発生器を用いて、可能な限り最高のエントロピーを提供することが求められています。例えば、プラットフォーム固有の乱数関数、 Unix の `/dev/urandom` デバイス、または他のランダムまたは擬似乱数データのソースなど、外部の擬似乱数ソースから取得したシード値が用いられます。

例
-

```js
const array = new Uint32Array(10);
self.crypto.getRandomValues(array);

console.log("Your lucky numbers:");
for (const num of array) {
  console.log(num);
}
```

仕様書
---

| Specification |
| --- |
| Web Cryptography API # Crypto-method-getRandomValues |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブ暗号 API
* `Crypto` オブジェクトを取得する `crypto`。
* `Math.random` 暗号学的に安全ではない乱数値。


CanvasPattern: setTransform() メソッド - Web API

CanvasPattern: setTransform() メソッド
==================================

**`CanvasPattern.setTransform()`** メソッドは、パターンの変換行列として `DOMMatrix` オブジェクトを使用し、パターンにこれを実行します。

構文
--

```js
setTransform(matrix)
```

### 引数

`matrix`

パターンの変換行列として使用する `DOMMatrix` です。

### 返値

なし (`undefined`)。

例
-

### `setTransform` メソッドの使用

これは `setTransform` メソッドを使用して `DOMMatrix` によるパターンの座標変換を指定して `CanvasPattern` を生成する簡単なコードスニペットです。たとえば、パターンが現在の `fillStyle` として適用され、`fillRect()` メソッドを使用すると、キャンバスに描画されます。

#### HTML

```html
<canvas id="canvas"></canvas>
```

#### JavaScript

```js
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

const matrix = new DOMMatrix([1, 0.2, 0.8, 1, 0, 0]);

const img = new Image();
img.src =
  "/en-US/docs/Web/API/CanvasPattern/setTransform/canvas\_createpattern.png";

img.onload = () => {
  const pattern = ctx.createPattern(img, "repeat");
  pattern.setTransform(matrix.rotate(-45).scale(1.5));
  ctx.fillStyle = pattern;
  ctx.fillRect(0, 0, 400, 400);
};
```

#### 編集可能なデモ

上のコードスニペットの編集可能なデモです。 `SetTransform()` の引数を変更して、その効果を確認してみてください。
```

<canvas id="canvas" width="400" height="200" class="playable-canvas"></canvas>
<div class="playable-buttons">
  <input id="edit" type="button" value="Edit" />
  <input id="reset" type="button" value="Reset" />
</div>
<textarea id="code" class="playable-code" style="height:120px">
const img = new Image();
img.src = '/en-US/docs/Web/API/CanvasPattern/setTransform/canvas_createpattern.png';
img.onload = () => {
  const pattern = ctx.createPattern(img, 'repeat');
  pattern.setTransform(matrix.rotate(-45).scale(1.5));
  ctx.fillStyle = pattern;
  ctx.fillRect(0, 0, 400, 400);
};
</textarea>
```

```
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const textarea = document.getElementById("code");
const reset = document.getElementById("reset");
const edit = document.getElementById("edit");
const code = textarea.value;

const matrix = new DOMMatrix([1, 0.2, 0.8, 1, 0, 0]);

function drawCanvas() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  eval(textarea.value);
}

reset.addEventListener("click", () => {
  textarea.value = code;
  drawCanvas();
});

edit.addEventListener("click", () => {
  textarea.focus();
});

textarea.addEventListener("input", drawCanvas);
window.addEventListener("load", drawCanvas);
```

仕様書
---

| Specification |
| --- |
| HTML Standard # dom-canvaspattern-settransform-dev |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* このメソッドを定義しているインターフェイス: `CanvasPattern`
* `DOMMatrix`


WebGLRenderingContext: canvas プロパティ - Web API

WebGLRenderingContext: canvas プロパティ
===================================

**`WebGLRenderingContext.canvas`** プロパティは、コンテキストに関連付けられた `HTMLCanvasElement` または `OffscreenCanvas` (en-US) オブジェクトへの読み取り専用の参照です。また、 `<canvas>` 要素や `OffscreenCanvas` (en-US) オブジェクトに関連付けられていない場合、 `null` になる可能性があります。

構文
--

```js
gl.canvas
```

### 返値

`HTMLCanvasElement` または `OffscreenCanvas` (en-US) オブジェクトか、 `null` のいずれか。

例
-

### canvas 要素

この `<canvas>` 要素があるとします。

```html
<canvas id="canvas"></canvas>
```

`WebGLRenderingContext` から `canvas` プロパティを使用して、参照を取得することができます。

```js
const canvas = document.getElementById("canvas");
const gl = canvas.getContext("webgl");
gl.canvas; // HTMLCanvasElement
```

### オフスクリーンキャンバス

実験的な `OffscreenCanvas` (en-US) オブジェクトを使用した例です。

```js
const offscreen = new OffscreenCanvas(256, 256);
const gl = offscreen.getContext("webgl");
gl.canvas; // OffscreenCanvas
```

仕様書
---

| Specification |
| --- |
| WebGL Specification # DOM-WebGLRenderingContext-canvas |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `CanvasRenderingContext2D.canvas`
* `OffscreenCanvas` (en-US) インターフェイス


WebGLRenderingContext.uniform[1234][fi][v]() - Web API

WebGLRenderingContext.uniform[1234][fi][v]()
============================================

**`WebGLRenderingContext.uniform[1234][fi][v]()`** は WebGL API のメソッドで、ユニフォーム変数の値を指定します。プログラムオブジェクトで定義されたすべてのアクティブなユニフォーム変数は、プログラムオブジェクトが正常にリンクされたときに 0 に初期化されます。それらは、プログラムオブジェクトのリンクが成功し、再び 0 に初期化されるまで、このメソッドの呼び出しによって割り当てられた値を保持します。

**メモ:** ここで書かれている関数の多くは WebGL 2 インターフェイスで拡張されており、
 `WebGL2RenderingContext.uniform[1234][uif][v]()` (en-US) 以下にあります。

構文
--

```js
void gl.uniform1f(location, v0);
void gl.uniform1fv(location, value);
void gl.uniform1i(location, v0);
void gl.uniform1iv(location, value);

void gl.uniform2f(location, v0, v1);
void gl.uniform2fv(location, value);
void gl.uniform2i(location, v0, v1);
void gl.uniform2iv(location, value);

void gl.uniform3f(location, v0, v1, v2);
void gl.uniform3fv(location, value);
void gl.uniform3i(location, v0, v1, v2);
void gl.uniform3iv(location, value);

void gl.uniform4f(location, v0, v1, v2, v3);
void gl.uniform4fv(location, value);
void gl.uniform4i(location, v0, v1, v2, v3);
void gl.uniform4iv(location, value);
```

### 引数

location

`WebGLUniformLocation` (en-US) オブジェクトで、変更するユニフォーム属性の位置を変更します。

`value, v0, v1, v2, v3`

ユニフォーム変数に使用される新しい値です。指定可能な型は次の通りです。

* 浮動小数点の `Number`: 浮動小数点値（"f" の付いたメソッド）に使用します。
* 一連の浮動小数点値（例えば `Float32Array` または数値の `Array`）: 浮動小数点のベクターメソッド（"fv" の付いたメソッド）に使用します。
* 整数の `Number`: 整数値（"i" の付いたメソッド）に使用します。
* `Int32Array`: 整数のベクターメソッド（"iv" の付いたメソッド）。

### 返値

なし。

例
-

```js
gl.uniform1f(u_alpha, 0.8);
```

仕様書
---

| Specification |
| --- |
| WebGL Specification # 5.14.10 |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `WebGLRenderingContext.uniformMatrix()`