- - PR -
onUnload処理の制御について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-07 18:22
いつもお世話になります。いのきです。
度々、javascriptの画面制御の質問で申し訳ありません。 下記内容の画面があります。 ・A(親)・・・サブミット処理で再描画あり ・B(子)・・・Aにぶらさがる子画面 AのonUnloadにてBも閉じる処理を行っています。 しかし、再描画の場合はBを閉じたくないのですが、AのonUnload処理で、Bが閉じてしまいます。 window.closedで画面が閉じていたらという条件を入れても同じ結果でした。 onUnloadで再描画の場合Bは閉じず、Aを完全に閉じた場合のみBも閉じる処理を行いたいのですが、 どなたかご存知の方、ご教授をお願い致します。 | ||||||||
|
投稿日時: 2005-11-07 18:59
こんにちは、でっちです。
OnUnloadだと無理かな。 逆の発想で、Bから「Aが生きているか」を定期的に見に行けばどうでしょう? Bにこんな関数を用意しておいて、
Aが画面遷移した場合にも閉じたいのならもう一工夫必要ですけどね。 [ メッセージ編集済み 編集者: でっち6号 編集日時 2005-11-07 19:02 ] | ||||||||
|
投稿日時: 2005-11-07 19:03
A画面のonUnloadにて、以下のようなコードを書いているとします。
これを
とすれば、「Bを閉じていい」がtrueの場合しかBが閉じません。(当たり前ですが) 「Bを閉じていい」をグローバルに宣言し初期値をtrueとしておけば、 あとはいのきさんの都合のいいタイミングでfalseをセットすることで、お望みの処理が実現できそうです。 都合のいいタイミングに処理を入れることはできませんか? (例えば、「更新」ボタンのonclickとか。formのonsubmitとか。) あ。この方法ですと、ブラウザのリロードボタン等では、B画面を制御することはできません。(処理を入れられませんからね。) # でっち6号さんとmioさんの投稿をみてちょっと編集 [ メッセージ編集済み 編集者: He 編集日時 2005-11-07 19:16 ] | ||||||||
|
投稿日時: 2005-11-07 19:05
これは、でっち6号さんのようにするしかないですね。
表示項目はともかく、ツールバーや×ボタンなんかの制御はできないから。 | ||||||||
|
投稿日時: 2005-11-07 20:11
いつもお世話になります。いのきです。
でっちさん、Heさん、mioさん回答ありがとうございました。 なるほど、逆の発想ですか!気づきませんでした(涙)。 確かに子画面側でこの方法をやるといけそうですね。 でも、setTimeoutで定期的に呼ばれるようにするにはどうすればよろしいでしょうか? onLoad処理に var chkOpenerTime = setTimeout("openercheck_and_close();", i += 3000); といれてやってるのですが、1回しか呼ばれないです・・・。 度々で申し訳ありませんが、ご教授をお願い致します。 | ||||||||
|
投稿日時: 2005-11-07 20:15
でっちです。
第二引数が評価式と判断されてるからかな? (^_^; 普通にmsecを数値で指定すれば良いですよ。 chkOpenerTime = setTimeout("openercheck_and_close();", 3000); | ||||||||
|
投稿日時: 2005-11-07 20:21
繰り返し呼び出したいなら、setInterval関数ですよ。
setTimeoutは指定された時間経過後に指定された関数を実行します。 | ||||||||
|
投稿日時: 2005-11-07 20:23
いつもお世話になります。いのきです。
でっちさん、度重なるご返答、誠にありがとうございます。 やはり、setTimeoutは1回しか呼ばれないです(涙)。 質問なのですが、setIntervalではダメなのでしょうか? あ、Heさんとかぶった・・・。 [ メッセージ編集済み 編集者: いのき 編集日時 2005-11-07 20:24 ] |