- - PR -
親画面(フレーム有り)遷移後も、子が親の情報を覚えておくには
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-13 12:14
お知恵を拝借させて下さい。
ASP.Net1.1+ VB.net でIEのWebアプリを作成しております。 親(フレーム)→子と開いて、子を閉じる際に親を更新させております。 子画面からDB保存作業→Response.Write(JavaScript)で親画面を 操作しておりますが、JavaScriptの部分で希望する操作の記述が分かりません。 親には target="_parent"の検索画面等も含まれているため ユーザーによるフレームを崩した画面遷移も予想されるのですが、 フレームの場合、フレームを崩して遷移した後操作しようとすると Object.Errorになってしまいます。 Try〜Cathで捕まえても、 ステータスバーに「'親画面'を開きます」と出るものの遷移しません。 parentの書き方が間違っているのでしょうか。 またTryCatch以外に適した記述がありましたら、ご教授いただけたら嬉しいです。 以下テスト用のソースを掲載いたします。 長くなって申し訳ございませんが、どうぞよろしくお願いいたします。 =====framgepage.html=========================================== <HTML> <FRAMESET COLS="50%,*" FRAMEBORDER=1> <FRAME NAME="left" SRC="leht.html"> <FRAME NAME="right" SRC="right.html"> </FRAMESET> </HTML> =====leht.html================================================ <HTML><BODY><FORM> <input type="button" value="1:子画面を開く" onClick="window.open('newpage.html');"> </FORM></BODY></HTML> =====right.html=============================================== <HTML><BODY></BODY> </HTML> =====newpage.html============================================= <HTML> <HEAD> <SCRIPT language="JavaScript"> function subRefresh(newpage){ if (window.opener.closed) { window.open('framepage.html'); window.alert("親画面が閉じていました"); } else { opener.parent.frames['left'].location.href = newpage; window.alert("親画面のフレーム[左]を更新しました") }} function CathErr(newpage){ try { subRefresh(newpage); }catch(myError){ window.alert(myError + "画面が遷移していたので元に戻します"); opener.location.href = 'framepage.html'; }} //--> </SCRIPT> </HEAD> <BODY> <form><input type="button" value="2:親画面左を遷移" onClick='CathErr("http://www.yahoo.co.jp/");'></form> <form><input type="button" value="3:親画面をフレームを崩して遷移" onClick="opener.parent.location.href= 'http://www.yahoo.co.jp/'"></form>(ユーザー操作想定)<br> <form><input type="button" value="4:親画面を戻す" onClick='CathErr("http://www.yahoo.co.jp/");'></form> </BODY></HTML> | ||||||||
|
投稿日時: 2007-03-13 12:18
すみません、訂正です
=====framgepage.html=========================================== → =====framepage.html=========================================== でした。 | ||||||||
|
投稿日時: 2007-03-13 14:35
| ||||||||
|
投稿日時: 2007-03-13 15:54
ご回答ありがとうございます。 仰るとおりframesはないのでエラーが起こりますが、そのエラーCatchの >opener.location.href = 'framepage.html'; が遷移してくれないのはどうしてなのかと困っております。 opener.parent.location.href = 'framepage.html'; としても同じでした。 この’opener’という情報がフレームを崩した時点で破棄されているのかなと想像しているのですが 勉強不足のため対処方法が分かりません。 恐れ入りますが、引き続き教えて頂けたら嬉しいです。 | ||||||||
|
投稿日時: 2007-03-13 16:10
ドメインが異なるwindowにはアクセスできません。予めフレームセットのウィンドウに名前を付けておき、子ウィンドウにおいたダミーのform(targetをフレームセットのウィンドウに設定)をサブミットさせるなどで回避可能かと。 | ||||||||
|
投稿日時: 2007-03-13 16:38
ご回答ありがとうございます。 そのような回避方法があるのですね! >targetをフレームセットのウィンドウに設定 はなんとなく想像がつくのですが、 >子ウィンドウにおいたダミーのformをサブミットさせる をちょっと勉強して参りますので、 すみませんが、ご提示頂いた方法についてお返事少々遅くなります。ほんとにすみません。 | ||||||||
|
投稿日時: 2007-03-13 18:49
Heです。
先ほどの投稿はケータイからだったので、言葉足らずでわかりにくところがありましたね。すみません。 ご自分で勉強される意欲がお有りのようなので敢えてコードを示すことはしませんが、おこがましくもヒントじみたものを。 「予めフレームセットのウィンドウに名前を付ける」が達成できれば、 あとは、そのウィンドウをtargetにしたリクエストがだせれば良いわけです。 「ダミーのformをサブミットさせる」でも「アンカー(A要素)をクリックさせる」でもかまいません。いずれにしてもスクリプトでの操作になります。 また、任意の要素をスクリプトから参照する際は、要素にIDを設定しておくと楽です。 IEのDHTMLリファレンスは以下です。参考にしてください。 http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp | ||||||||
|
投稿日時: 2007-03-14 10:40
そもそも、他のドメインへいくのに、フレームの中で遷移するのが間違っているのでは? target="_top" にすれば、子画面もなくなるので問題なし!!とか。
ダウト。 RegisterClientScriptBlock とか、 RegisterStartupScript とかを使いましょう。 _________________ |