FirefoxのWebExtensionsで、ショートカットキーはmanifest.json
のcommands
で定義します。
"commands": { "toggle-feature": { "suggested_key": { "default": "Ctrl+Shift+Y", "linux": "Ctrl+Shift+U" }, "description": "Send a 'toggle-feature' event" } }
suggested_key
にそのコマンドに対するショートカットキーを書くのですが、重複したときどうなるのかわからなかったので、調べてみました。
検証コード
下記のようなmanifest.json
を用意して、拡張の中でショートカットキーを重複させたものと、標準である機能に対するショートカットキーと重複させてみて確認しました。
{ "description": "", "manifest_version": 2, "name": "", "version": "1.0", "homepage_url": "https://github.com/onozaty/sandbox", "background": { "scripts": ["background.js"] }, "commands": { "command-a-1": { "suggested_key": { "default": "Ctrl+Shift+Y" } }, "command-a-2": { "suggested_key": { "default": "Ctrl+Shift+Y" } }, "command-a-3": { "suggested_key": { "default": "Ctrl+Shift+Y" } }, "command-b": { "suggested_key": { "default": "Ctrl+A" } }, "command-c": { "suggested_key": { "default": "Ctrl+1" } } } }
background.js
はこんな感じで、最初にcommand
の一覧を出力し、ショートカットキーによって受け取ったcommand
を出力するようにしています。(MDNのサンプルを参考に)
var gettingAllCommands = browser.commands.getAll(); gettingAllCommands.then((commands) => { for (let command of commands) { console.log(command); } }); browser.commands.onCommand.addListener((command) => { console.log("onCommand event received for message: ", command); });
結果
commandの一覧としては、manifest.json
に記載した形のままで取得されました。
同一拡張内での重複
拡張内で重複しているショートカットキーの"Ctrl+Shift+Y"を押下すると、先頭のコマンドのみ呼ばれました。
標準のショートカットキーとの重複
標準のショートカットキーと重複した"Ctrl+A"、"Ctrl+1"を押下したときも、問題なく拡張で定義したコマンドが呼ばれました。標準のショートカットキーによる動作はしなかったので、標準のショートカットキーを拡張で奪えるようです。
拡張間で重複
同じ内容の拡張を2つ登録したところ、当然片方しか呼ばれませんでした。
Chromeだと拡張で定義したショートカットキーを変更できるのですが、Firefoxだと同様の機能を見つけられていません。結局そういったものが無いと、ショートカットキーが競合してしまい、拡張機能の利便性損なうので、ぜひ入って欲しいですね。 (自分が見つけられてないだけかも?)