はじめに
本記事はWindows上での動作を想定しています。Mac OSはこちら
ブラウザごとに色々なショートカットがありますが、これをキャンセルし、独自のショートカットを追加したい時があります。
特にJavascriptでリッチテキストエディタを作る場合を想定し、contentEditable="true"なelementのイベント発火においてpreventDefault()でキャンセルできるか否かを、実際に試してリストアップしたので共有します。
概略
- OSやブラウザ本体の制御に近いものほどpreventDefaultできない。
- 想像以上にショートカットの種類があった。
- Windowsなら基本はkeydownでpreventDefaultする(Mac OSは事情が異なる)。
蛇足:keydownでpreventDefaultするとElectronのacceleratorも発火しなくなります。一方で、preventDefaultしなかった場合はブラウザのデフォルト動作とacceleratorの発火が共に起こり、これはこれで制御が難しい。
環境
- OS: Windows 10 (1903)
- Chrome 79.0.3945.130
- Edge (Legacy) 44.18362.449.0
- Firefox 72.0.2
表のみかた
キーボードでキー入力した場合にブラウザの行うデフォルト動作と、keydownイベントにおいてpreventDefault()の有効/無効をyes or noで表に示します。preventDefault()でキャンセルできる場合はyes、キャンセルできない場合はnoとしました。動作はChromeでの動作を基本とし、それと異なる動作をするブラウザではその旨を併記しました。
単独キー入力(without Modifier key)
| key | 動作 | Chrome | Edge(Legacy) | Firefox |
|---|---|---|---|---|
| A-Z,1-9 | 文字入力 | yes | yes | yes |
| 1文字分の長さの記号(括弧やカンマなど) | 文字入力 | yes | yes | yes |
| delete | 前方文字を消す | yes | yes | yes |
| backspace | 後方文字を消す | yes | yes | yes |
| Enter | 改行する(段落を区切る) | yes | yes | yes |
| insert | インサートmodeに変更 | yes | yes | なし |
| Alt | メニュー等へフォーカスを移す | yes | yes | no |
| Home | 表示上の行の先頭へ移動 | yes | yes | yes |
| End | 表示上の行の末尾へ移動 | yes | yes | yes |
| Page Up | 表示上の一画面上へ移動 | yes | yes | yes |
| Page Down | 表示上の一画面下へ移動 | yes | yes | yes |
| 右クリックキー | 右クリックメニューを呼ぶ | no | no | no |
Ctrlと同時に押した場合
| key | 動作 | Chrome | Edge(Legacy) | Firefox |
|---|---|---|---|---|
| A | 全選択 | yes | yes | yes |
| B | Boldにする | yes | yes | ブックマークを開く/yes |
| C | 選択領域をCopy | yes | yes | yes |
| D | ブックマーク追加 | yes | yes | yes |
| E | URL windowで検索 | yes | なし | yes |
| F | page内を検索 | yes | yes | yes |
| G | 検索中に次の候補へカーソル移動(検索中でない場合は、前回の検索を再開) | yes | なし | yes |
| H | ブラウザ履歴のページへ | yes | yes | yes |
| I | 選択領域をitalicにする | yes | yes | ブックマークを検索/yes |
| J | ダウンロード履歴 | yes | yes | 新しいタブを開く/yes |
| K | URL windowで検索(Eと同じ) | yes | yes | yes |
| L | URL バーへカーソル移動 | yes | yes | yes |
| M | なし | yes | リーディングリストを開く/yes | ミュート/yes |
| N | 新しいwindowsでブラウザを開く | no | yes | no |
| O | ファイルを開く | yes | URLバーバーへカーソル移動/yes | yes |
| P | ページの印刷 | yes | yes | yes |
| Q | なし | |||
| R | ページの再読み込み | yes | yes | yes |
| S | ページ(html)の保存 | yes | yes | yes |
| T | 新しいタブを開く | no | yes | プライベートモードで新しいタブを開く/no |
| U | 選択領域にunderlineを引く | yes | yes | ソースを開く/yes |
| V | Paste | yes | yes | yes |
| W | ブラウザ(タブ)を閉じる | no | yes | no |
| X | 切り取り | yes | yes | yes |
| Y | なし | Redo/yes | Redo/yes | |
| Z | Undo | yes | yes | yes |
| 1-9 | タブブラウザの切り替え | yes | yes | yes |
| 0 | なし | |||
| - | ページを縮小 | yes | yes | yes |
| = | ページを縮小 | yes | なし | yes |
| ; | ページを拡大 | yes | yes | yes |
| + | ページを拡大 | yes | なし | なし |
| ^ | なし | |||
| |なし | ||||
| @ | なし | |||
[ |
なし | |||
] |
なし | |||
| : | なし | |||
| / | なし | |||
| |なし | ||||
| , | なし | |||
| . | なし | |||
| space | なし | |||
| delete | 前方を単語単位で削除 | yes | yes | yes |
| backspace | 後方を単語単位で削除 | yes | yes | yes |
| enter | なし | 改行/yes | なし | |
| RightArrow | 前方へ単語単位で移動 | yes | yes | yes |
| LeftArrow | 後方へ単語単位で移動 | yes | yes | yes |
| UpArrow | なし | 行の先頭へ移動 | ||
| DownArrow | なし | 行の末尾へ移動 | ||
| Pageup | タブ切り替え | no | 表示されている範囲の先頭へ移動/yes | no |
| Pagedown | なしタブ切り替え | no | 表示されている範囲の末尾へ移動/yes | no |
| Home | 文章の先頭へ移動 | yes | yes | yes |
| End | 文章の末尾へ移動 | yes | yes | yes |
Ctrl+Shiftと同時に押した場合
| key | 動作 | Chrome | Edge(Legacy) | Firefox |
|---|---|---|---|---|
| A | なし | なし | アドオンマネージャーを開く/yes | |
| B | ブラウザのメニューを出す | yes | なし | ブラウジングライブラリーを開く/yes |
| G | 検索 | yes | 音声読み上げ | なし |
| H | なし | なし | ブラウジングライブラリーを開く/yes | |
| I | デバッグツールを開く | yes | なし | yes |
| J | デバッグツールを開く | yes | yes | 別windowでデバックツールを開く/yes |
| K | 無し | yes | 同じページを新しいタブで開く/yes | デバッグツールを開く/yes |
| L | なし | ページを再読み込み/yes | なし | |
| M | ユーザーログイン関連 | yes | 手書き入力モード/yes | モバイルデバイスのエミュレート表示/yes |
| N | シークレットモードでブラウザを開く | no | なし | なし |
| O | ブックマーク操作 | yes | yes | なし |
| P | 印刷 | yes | yes | 新しいwindowでブラウザを開く/no |
| Q | なし | なし | ブラウザ(全ページ)を閉じるブラウザを閉じる/no | |
| R | なし | なし | ページの再読み込み/no | |
| S | なし | なし | スクリーンショットを取る/yes | |
| T | ブックマーク操作 | no | 新しいタブで同じページを開く/yes | 設定画面へ移動/yes |
| V | pasteしつつデバッグウィンドウで操作されたDOMを可視化 | yes | なし | paste/yes |
| W | ブラウザ(全ページ)を閉じる | no | yes | no |
| Z | Redo | yes | なし | yes |
| Backspace | なし | 後方の単語の削除/yes | なし | |
| Delete | 閲覧履歴の削除 | yes | yes | なし |
| Enter | なし | 改行/yes | なし | |
| Arrow,Home,End,Pageup,Pagedown | 選択しながらフォーカス移動 | yes | yes | yes |
さいごに
全てのキーを押して試しました。眩暈が。。。しかし、Mac OSはもっときつかった。
ミスや漏れがあったらご指摘いただけたら嬉しいです。