イベント

イベントハンドラ

XUL要素に直接記述する方法と、スクリプトに記述する方法があります。

属性イベントリスナ (Attribute Event Listeners)

XUL要素の属性として記述します。

<button label="OK" oncommand="alert( 'Button was pressed!' );" />

要素に記述するのをcommand属性として、実際の処理をcommand要素に記述する方法もあります。

DOMイベントリスナ (DOM Event Listeners)

DOMレベル2のイベントリスナとして、スクリプトでハンドラを登録します。

<button id="okbutton" label="OK" />

<script type="application/x-javascript"><![CDATA[
  function ButtonPressed( event )
  {
      alert( 'Button was pressed!' );
  }

  var button = document.getElementById( 'okbutton' );
  button.addEventListener( 'command', ButtonPressed, false );
]]></script>

パフォーマンス向上のため、不要になったハンドラは削除するようにします。

key要素に対するハンドラはaddEventListener()では登録できず、setAttribute()を用います。

マウスイベント

clickイベント

XULのclickイベントはHTMLのそれと異なり、キー入力には応答しません。よってHTMLと同様の動作を期待するならば、代わりにcommandイベントを用います。

一つ重要な違いは、ボタンへの応答として、HTMLでは「click」イベント (onclick属性) が使われていますが、XULでは代わりにcommandイベントを使うべきであるということです。XULにもclickイベントはありますが、これはマウスのクリックに応答するだけで、キーボードを使用した場合には応答しません。このため、XULではマウスでのみ処理可能な要素を持つ理由がない限り、clickイベントの使用は避けるべきです。付け加えれば、commandイベントは、要素が無効状態の場合は送信されませんが、clickイベントは、無効かどうかにかかわらず送信されます。

属性イベントリスナー - イベントハンドラの追加 - XUL | MDN

キーイベント

キー入力をイベントで処理するには、キーイベントで捕捉します。

もしtextbox要素の値の変化を監視する目的ならば、それ専用のoninputイベントがあります。ただしこのイベントは、制御文字などの印刷可能ではないキーでは呼び出されません。

キーコード (keyCode)

キーイベントで得られるキーコードの値はComponents.interfaces.nsIDOMKeyEventオブジェクトで定義されており、たとえばAキーのコードは、

Components.interfaces.nsIDOMKeyEvent.DOM_VK_A;

または

window.KeyEvent.DOM_VK_A;

で取得できます。これらの定数の実際の値は、Constants for keyCode valuensIDOMKeyEvent.idlで一覧できます。

特定のキーにのみ応答する場合

特定のキー入力を処理するだけで良いのならば、イベント処理は不要です。

ウィンドウに対するキー入力は、keyset要素で捕捉できます。またXUL要素がキー入力に応答できるようにするには、その要素にaccesskey属性を指定します。

要素の状態変化

DOMのchangeイベントの他に、チェックボックスやラジオボタン用の専用のイベントもあります。これらのイベントはユーザーまたはスクリプトにより、要素の状態が変化させられたときに発生します。

  • CheckboxStateChange
  • RadioStateChange

ブラウザの監視

ブラウザの状態変化は、addProgressListener()で捕捉できます。

Eventインターフェイス

プロパティ

originalTarget

Eventのプロパティ

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