MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

prefwindowのselectイベント
https://forums.mozillazine.jp/viewtopic.php?f=26&t=7782
ページ 11

作成者:  ma2ten [ 2008年9月08日(月) 16:29 ]
記事の件名:  prefwindowのselectイベント

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

作成者:  [ 2008年9月10日(水) 23:03 ]
記事の件名:  Re: prefwindowのselectイベント

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

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

作成者:  Piro [ 2008年9月11日(木) 12:52 ]
記事の件名:  Re: prefwindowのselectイベント

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

作成者:  ma2ten [ 2008年9月11日(木) 18:35 ]
記事の件名:  Re: prefwindowのselectイベント

あさん、Piroさん、情報ありがとうございます。

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

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

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


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

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

作成者:  [ 2008年9月14日(日) 01:17 ]
記事の件名:  Re: prefwindowのselectイベント

ma2ten さんが書きました:
あ さんが書きました:
その一連の動作は command イベントで開始するようになっていますから、どのペインに切り替わるのかを取得するには、command イベントを捕らえれば良いでしょう。

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

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

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

作成者:  ma2ten [ 2008年9月14日(日) 13:49 ]
記事の件名:  Re: prefwindowのselectイベント

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

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

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

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

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/