- ベストアンサー
onunloadイベントでの画面制御について
フレームを使用した画面でwindow.openされた画面を フレーム分けした画面(Frame.asp)が閉じたら、すべて閉じたいと 思っています。onunloadイベントで制御を行うのは わかりましたが、その先、どのようにコーディングすれば良いか わかりません。ご教授ください。 Frame.asp <FRAMESET Cols="267,*" frameborder="0" onunload=""> <FRAME NAME="menuFrame" SRC="1.asp" NORESIZE SCROLLING="auto"> <FRAME NAME="mainFrame" SRC="2.asp" NORESIZE SCROLLING="auto"> 2.asp function viewtxtMsg{ subWin = window.open(strURL, "Msgwindow", "width=400,height=270,scrollbars=no,location=no,menubar=no,resizable=no"); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
親フレームページ(frame.asp)のunloadイベントは、子フレームに伝わる(親が閉じれば子も閉じるので当たり前)なので、No1の方が回答されているように子フレーム側のunloadイベントでsubWinを全部閉じる関数を実装すればよいのですが、子フレームのページが、たくさんあるとそれぞれに同じような関数を書くのが面倒です。そこで、親フレームにsubWinを保管するグローバルな変数と全部のsubWinを消す関数を準備して、親フレームのunloadイベントにセットします。 子フレームはsubWinを作る都度、subwinオブジェクトを親フレームの保管場所に保管するようにします。subwinにはユニーク名前をつけた方がよいですね。 <一例> 親:Frame.aspの定義 <html> <head> <script type="text/javascript" charset="utf-8"> <!-- var wins=[]; function CloseWin(){ for(i=0;i<wins.length;i++){ wins[i].window.close(); } } // --> </script> <FRAMESET Cols="267,*" frameborder="0" onunload ="CloseWin();"> <FRAME NAME="menuFrame" SRC="1.asp" NORESIZE SCROLLING="auto"> <FRAME NAME="menuFrame" SRC="2.asp" NORESIZE SCROLLING="auto"> </head> </html> 子:2.aspのjavascript viewtxtMsg("win1","http://hogehoge...."); viewtxtMsg("win2","http://fugafuga...."); function viewtxtMsg(winname,strURL){ subWin = window.open(strURL, winname, "width=400,height=270,scrollbars=no,location=no,menubar=no,resizable=no"); top.wins.push(subWin); } てな感じでどうでしょう。 aspじゃなくhtmでためしましたが、Firefox3、IE7でうまくいきました。
その他の回答 (1)
- askaaska
- ベストアンサー率35% (1455/4149)
いくつか方法あるけど。 実装するのはフレームの方ね。 ・window.openの戻り値を格納する配列を用意しておいて onunloadで1つ1つcloseしていく方法。 ・window.openのさいのウィンドウ名を格納する配列を用意しておいて onunloadで1つ1つ再Openし、即座にそれをcloseする方法。 ・それらの応用。