― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年9月08日(月) 16:29 
オフライン

登録日時: 2008年4月25日(金) 17:24
記事: 35
拡張のオプションダイアログでprefwindowを使用しています。
prefpaneの内の1つが選択された時に処理を行うため、onselectで関数を呼ぶようにしようと思ったのですが、そこでprefwindowのcurrentPaneプロパティを確認すると、どうも現在選択中のペインではなく、前に選択されていたペインの値になっているようでした。
ちなみにそのid値とlastSelectedの値は同じ結果に見えます。
これはバグでしょうか?
それともprefwindowでのselectイベントはこういう動作になってしまうのでしょうか。
よろしくお願いします。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年9月10日(水) 23:03 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
ma2ten さんが書きました:
それともprefwindowでのselectイベントはこういう動作になってしまうのでしょうか。
pane を切り替えるときには、その pane を選択したり、pane の selector を選択したり、prefwindow のプロパティを設定したり…といった一連の動作が行われますが、select イベントはその中の「pane を選択」とか「selector を選択」とかで発生するはずですから、「一連の動作」はまだ途中ですね。
つまり、select イベントが発生した時点では、「一連の動作」が完了していると思ってはいけないはずです。

その一連の動作は command イベントで開始するようになっていますから、どのペインに切り替わるのかを取得するには、command イベントを捕らえれば良いでしょう。
もし、そうではなくて「一連の動作」が完了したときを捕らえたいのであれば… そんなイベントがあるのかどうかは知りません。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年9月11日(木) 12:52 
オフライン
Moderator

登録日時: 2007年5月03日(木) 01:11
記事: 92
お住まい: 東京
ボタンのクリック→prefpaneの切り替え→必要に応じて、そのペインの内容のロード
まで終わった段階でpaneloadというイベントが発生しますので、それを使ってみてはどうでしょうか。
prefpane要素にonpaneloadイベントハンドラを書くだけでも利用できます。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年9月11日(木) 18:35 
オフライン

登録日時: 2008年4月25日(金) 17:24
記事: 35
あさん、Piroさん、情報ありがとうございます。

あ さんが書きました:
pane を切り替えるときには、その pane を選択したり、pane の selector を選択したり、prefwindow のプロパティを設定したり…といった一連の動作が行われますが、select イベントはその中の「pane を選択」とか「selector を選択」とかで発生するはずですから、「一連の動作」はまだ途中ですね。
つまり、select イベントが発生した時点では、「一連の動作」が完了していると思ってはいけないはずです。

その一連の動作は command イベントで開始するようになっていますから、どのペインに切り替わるのかを取得するには、command イベントを捕らえれば良いでしょう。
もし、そうではなくて「一連の動作」が完了したときを捕らえたいのであれば… そんなイベントがあるのかどうかは知りません。

なるほど、やはり切り替わる前でイベントが発生してたんですね。
prefwindowでのoncommandをちょっと試してみたところ、lastSelectedプロパティの値が選択したペインの値を指しているように見えました。
これで合ってるのかな?(^^;)


Piro さんが書きました:
ボタンのクリック→prefpaneの切り替え→必要に応じて、そのペインの内容のロード
まで終わった段階でpaneloadというイベントが発生しますので、それを使ってみてはどうでしょうか。
prefpane要素にonpaneloadイベントハンドラを書くだけでも利用できます。

paneloadというのはそのペインが最初にロードされた時だけに発生するイベントと解釈していました。
実際ちょっと試してみたところ、ウィンドウが開いた時に一度呼ばれて、その後はペインの切り替えをしても呼ばれないようでした。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年9月14日(日) 01:17 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
ma2ten さんが書きました:
あ さんが書きました:
その一連の動作は command イベントで開始するようになっていますから、どのペインに切り替わるのかを取得するには、command イベントを捕らえれば良いでしょう。

なるほど、やはり切り替わる前でイベントが発生してたんですね。
prefwindowでのoncommandをちょっと試してみたところ、lastSelectedプロパティの値が選択したペインの値を指しているように見えました。
これで合ってるのかな?(^^;)

lastSelected プロパティが変化するのは「一連の処理」の結果ですから、prefwindow 側の「一連の処理」が終わった後ならば変化していますが、もしその前に自分の方が呼ばれてしまったら変化前です。

そうではなく、切り替わった結果を調べるのではなくて「prefwindow が切り替えようとする先はどこなのか」の取得であれば、切り替え処理の前でも後でも、同じものが取得できるはずです。
それを取得するのは、先に書いたリンク先にある
コード:
var pane = document.getElementById(event.originalTarget.getAttribute("pane"));
のところです。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年9月14日(日) 13:49 
オフライン

登録日時: 2008年4月25日(金) 17:24
記事: 35
あ さんが書きました:
lastSelected プロパティが変化するのは「一連の処理」の結果ですから、prefwindow 側の「一連の処理」が終わった後ならば変化していますが、もしその前に自分の方が呼ばれてしまったら変化前です。

そうではなく、切り替わった結果を調べるのではなくて「prefwindow が切り替えようとする先はどこなのか」の取得であれば、切り替え処理の前でも後でも、同じものが取得できるはずです。
それを取得するのは、先に書いたリンク先にある
コード:
var pane = document.getElementById(event.originalTarget.getAttribute("pane"));
のところです。

すいません、中途半端に見て勘違いしていました。
あらためて試してみたところ、確かに選択した(しようとした?)paneを得ることができました。
あと最初eventのoriginalTargetというプロパティを知らなくてtargetばかり見ていましたが、originalTargetの方を参照するという点もポイントですかね。

ご指摘ありがとうございました。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[5人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean