キーボード ショートカット (Keyboard Shortcuts)

ウィンドウ上からのキー入力に応答するには、keysetとkey要素で次のように記述します。

<keyset>
  <key modifiers="shift" key="a" oncommand="Func()" />
</keyset>

対象とするのが印刷可能ではないキーならば、key属性ではなくkeycode属性を用います。keycode 属性

<keyset>
  <key keycode="VK_F1" />
</keyset>

このkeycode属性には印刷可能なキーも'VK_A'のように定義されていますが、これらをkeycode属性に指定しても機能しません。印刷可能なキーならば、それはkey属性で指定しなければなりません。また定義にない値をkeycode属性に指定すると、すべての印刷可能なキーに対して応答してしまいます。

修飾キーは、modifiers属性に下表の値を指定します。複数の修飾キーを組み合わせるには、スペースまたはカンマで区切って'control,shift'のように並べます。

modifiers
対応する修飾キー
control※1 Ctrl
shift Shift
alt Alt
accel ユーザーの環境によって異なります。
  • Windows、Linux … Ctrl
  • Mac … command
※1 「ctrl」ではなく「control」 modifiers - XUL | MDN

割り当てたキーがすでに使用されている場合、その割り当ては無視されます。よってFirefoxのショートカットを事前に確認すべきです。

動的な割り当て

キーの割り当てを動的に行うならば、次のようにスクリプトで属性を設定します。

var key = document.createElement( 'key' );

key.setAttribute( 'modifiers', 'shift' );
key.setAttribute( 'key', 'a' );
key.setAttribute( 'oncommand', 'Func()' );

このときoncommand属性は本来、

key.addEventListener( 'command', Func, true );

のようにイベントリスナで登録すべきですが、このように記述してもリスナは呼び出されませんCreating a key element dynamically • mozillaZine Forums

ブラウザ上での利用

ショートカットキーをブラウザ上で機能させるには、それを定義するXUL要素をブラウザにオーバーレイさせる必要があります。そのときブラウザ (chrome://browser/content/browser.xul) では、keysetのid属性が'mainKeyset'として定義されているため、オーバーレイする側でもこれと同じidを指定するか、さもなくば何も指定せずにおきます。これと異なるidを指定した場合、オーバーレイしたショートカットは機能しません。id="mainKeyset" on XUL keyset, yes or no? • mozillaZine Forums

<keyset id="mainKeyset">
  <key modifiers="shift" key="a" oncommand="Func();" />
</keyset>

このブラウザで定義されているkeysetのid属性は、DOM Inspectorchrome://browser/content/browser.xulを開き、[Find Nodes]で対象をTagとして[keyset]を検索することで確認できます。How can I see all the assigned keyboard shortcuts, including those from my installed add-ons? | Firefox Support Forum | Mozilla Support

Firefoxアドオンの情報サイトから、まとめて検索