ショートカットキー(キーバインド)
ショートカットキーから拡張機能を実行したい。
結論
大きく分けて方法は2つ。
commands を定義する。
- 標準のキーバインドが優先される。 バインド可能なキーが限定される。
content_script がキーイベントをハンドルする。
- 自由にバインドできる。 標準のキーバインドを上書きしてしまうので要注意!
方法1: commands を定義する
Menifest に commands (suggested_key) を定義する。
background に chrome.commands.onCommand を実装する。
Manifest.json
"background": {
"scripts": [ "background.js" ]
},
"commands": {
"command1": {
"suggested_key": {
"default": "Ctrl+Shift+Y"
},
"description": "command1"
}
},
background.js
chrome.commands.onCommand.addListener(function(command) { if (command === 'command1') { console.log('Do your stuff'); } });
方法2: content_script が key イベントをハンドルする
Manifest.json
"content_scripts": [{
"matches": [ "*://*/*" ],
"js": [ "content.js" ]
}],
content_script
window.addEventListener('keydown', function(event) { if ((!isMac && !event.ctrlKey) || (isMac && ! event.metaKey)) return; if (!event.shiftKey) return; var key = event.key which (key) { case 89: //'Y' console.log('Do your stuff'); break; } }, true);
keyCode
KeyboardEvent.keyCode は非推奨。
代わりに、KeyboardEvent.key を使うこと、と書いてある(説明不足)。
押されたキーは KeyboardEvent.code を使う仕様である。
手元の Chrome 47.0.2526.80 では、
keyCode : 現役
key と code : 未実装
のため、keyCode によって判定した。
将来的には、次のように直さなければならないのかも知れない:
which (event.code) { case 'KeyY': console.log('Do your stuff'); break; }
Gecho 系ではすでに key と code が実装されている。
簡単にストラテジーを切り替えられるライブラリがあるのかも知れない
(が、目的は Chrome 拡張なので調査していない)。