ファイヤープロジェクト
アクションの導入
2005-02-22T14:30+09:00   matsu
今までのサンプルはボタン等が表示されるものの,なんら動作するものではなかった.そこで,ユーザの操作に応じてアクションを起こす方法を調査した.
XULアプリケーションでアクションを組み込むには,JavaScriptを使用する方法がある.これはHTML+JavaScriptと同様のスタイルで実装できる.とにかく動くモノをということで,サンプルを以下に示す.まずXULファイル.
JavaScriptファイルの指定の記述は以下.
<script type="application/x-javascript" src="helloaction.js"/>
属性srcの値がJavaScriptファイル名.XULパッケージでは,JavaScriptファイルはXULファイルと同じディレクトリ(contents)に置く.以下がそのJavaScriptファイル.
二つの関数helloaction,closewindowがある.XULファイルからこれを呼ぶもっとも簡単な方法は,各要素のイベントハンドラを指定するための属性値に指定する方法である.helloaction.xulでは最初のボタンにおいて,その方法でhelloaction関数の呼出を行っている.
<button label="Push Me1" oncommand="helloaction()" />
要素buttonにはボタンを選択された(クリックされた)ことを示すイベントに対するイベントハンドラ指定属性oncommandがあり,その値として関数helloactionを指定している.アクションを指定するもう一つの方法は,要素commandを使用する方法である.要素commandはコマンドを表現し,値oncommandにて実際に実行するコマンド(関数)を保持する.
  <command id="button:helloaction" oncommand="helloaction();"/>
この要素commandをイベントハンドラとして指定するには,ボタン側では属性commandの値に要素commandのidを指定する.helloaction.xulでは二番目のボタンがそれである.
<button label="Push Me2" command="button:helloaction" />
ボタンを押すとid値が"button:helloaction"である要素commandに通知され,要素commandがイベントハンドラhelloaction()を使用してイベントを処理する.このサンプルパッケージのcontents.rdfを以下にしめす.
上記サンプルで,イベントハンドラを作成して指定するだいたいの流れを示した.ではイベントハンドラを指定できるイベントにはどんなものがあるかを以下に示す.見出しは要素の属性名になっており,そのイベントにハンドラを指定するには属性値にハンドラを指定すればよい(つまりサンプルと同様である).
onclick
マウスがその要素上で押されて離された.厳密に「マウスがクリックされた時」の動作を指定したい場合にのみ使用すべきである.要素button,menuitemのようなものの場合は,ユーザがキーボードで指定した場合も想定してoncommandを使用すべきである.
onmousedown
マウスがその要素上で押された(ボタンが離されていなくても該当する).
onmouseup
マウスが離された.
onmouseover
マウスポインタがその要素上に来た.これを使用して要素をハイライトしたりできるが,CSSでできる範囲のことはCSSでやったほうがよいらしい.
onmousemove
マウスポインタがその要素上で動いた.このイベントは頻繁に発生するのでできるだけ使いたくない.
onmouseout
マウスポインタがその要素の範囲害に動いた.
oncommand
ボタンやメニューアイテムが選択された.メニューにおいては要素menuitemにて指定すること.
onkeypress
要素がフォーカスされている時にキーが押されて離された.
onkeydown
要素がフォーカスされている時にキーが押された(キーが離されていなくても該当する).
onkeyup
要素がフォーカスされている時にキーが離された.
onfocus
マウスかTABキーを使用して要素がフォーカスされた.
onblur
マウスかTABキーを使用して要素からフォーカスが外れた.
onload
要素windowが最初に開かれた際が該当する.要素windowの初期化に使用できる.
onunload
要素windowが閉じられる際(厳密には閉じれる直前)が該当する.
matsu(C)
Since 2002
Mail to matsu