プロが教える店舗&オフィスのセキュリティ対策術

フレームを使用した画面で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");
}

A 回答 (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でうまくいきました。
    • good
    • 0

いくつか方法あるけど。


実装するのはフレームの方ね。

・window.openの戻り値を格納する配列を用意しておいて
 onunloadで1つ1つcloseしていく方法。
・window.openのさいのウィンドウ名を格納する配列を用意しておいて
 onunloadで1つ1つ再Openし、即座にそれをcloseする方法。
・それらの応用。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!