再開した親にデータを送りたい

[上に] [前に] [次に]
omi [E-Mail] 1998/12/10(木) 23:23:05
親のフォームの値を見ている子ウィンドウが、
親が立ち上げ直されると、エラーしてしまいます。
NN4では、エラーしません。
子が親を見るとき、相対的な opner から、 絶対的な "menu" で
オブジェクト指定できればいいのかもしれませんが、その方法が不明です。
親の生死が判るだけでもいいんですが。
以下を実行して、
親を一旦閉じて再開しても、子がエラーしなければ良いのですが、。
みなさまのお知恵をお貸し下さい。<(_ _)>

<HTML><BODY>親のい居るフレーム名は"menu"です<BR>
<FORM name='Fparent'>
親 <INPUT name='A1' type=button size=10 value='      ' onClick="w.close()">
</FORM>
<SCRIPT>
w = window.open('','dmyA','');
w.document.write("<HTML><BODY><FORM name='Fchild'>");
w.document.write("子 <INPUT name='B1' type=text></FORM>\n<SCRIPT>\n");
w.document.write("setTimeout(\"window.opener.document.Fparent.A1.value =' Good bye '; document.Fchild.B1.value =' Good bye '\", 2000); ");
w.document.write("<\/SCRIPT></BODY></HTML>");
w.document.close();
</SCRIPT>
</BODY></HTML>

mura [E-Mail] 1998/12/11(金) 07:22:31
うーん、リロードされると子供はopenerを失うわけですね。メモメモ…。

親と子に変数を用意して値をtrueにし、それぞれのonUnloadでfalseに
するっていうのはどうでしょう?
[親]
childalive=true; // ←これをw.document.open()の前あたりに持っていく
<BODY onUnload="if(childalive) w.parentalive=false;">

あともちろん<INPUT>でw.close()する時にいっしょにchildalive=falseをやって下さい。
childalive=falseしてからw.closeする方がリスクが少ないですね。(実際は変わらないかもしれませんが)

[子]
parentalive=true; // ←これを親のw.document.write()の中で書く
<BODY onUnload="if(parentalive) window.opener.childalive=false;">

setTimeoutの前に「if(parentalive)」を一発かましてやって下さい。

ちょっと考えただけですので、もっといい方法がある(あるいは上記方法だとバグがある)と思います。
もーっと簡単に、親のBODY onUnloadに「w.close();」と書くのはだめなんでしょうか?

omi 1998/12/11(金) 21:31:30
mura さん、ありがとうございます。

双方がフラグを持つのは、いいアイデアですね。メモメモ…。
でも、アルゴリズムが複雑ですねー。完成には、もう一段 if文が必要な気がします。
とりあえず、親に <BODY onUnload="if (childalive) w.close();" を組んでみます。
タイミングに因って、close しなかったり、windows98 のシステムエラーが発生します。
w = window.open('','dmyA','dependent=yes');が有効に働けば問題ないんですが、。


[上に] [前に] [次に]