• ベストアンサー

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"); }

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答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)
回答No.1

いくつか方法あるけど。 実装するのはフレームの方ね。 ・window.openの戻り値を格納する配列を用意しておいて  onunloadで1つ1つcloseしていく方法。 ・window.openのさいのウィンドウ名を格納する配列を用意しておいて  onunloadで1つ1つ再Openし、即座にそれをcloseする方法。 ・それらの応用。

関連するQ&A

  • フレームが固定できない

    Dreamweaverで左固定メニューで右にメインフレームがでるものをつくっています。 プレビューでみると画面の大きさを大きくすると左フレームと右フレームのあいだに白い余白ができ、画面を小さくするとその間が交差しながら小さくなります。 noresizeをいれているのですが、これがなおりません!画面の大きさをかえても右フレームと左フレームの境界線をなしにしたいのですがどうしたらいいのでしょう。 ちなみにコードはこうなっています。 <frameset rows="*"cols="245,900" frameborder="no" border="0"> <frame src="menu/menu.html" name="leftframe" frameborder="no" scrolling="no" noresize="noresize" marginwidth="0" marginheight="0" id="leftframe" border="0"/> <frame src="welcomephoto.html" name="mainframe" frameborder="no" noresize="noresize" marginwidth="0" marginheight="0"id="mainframe" border="0" /> </frameset> <noframes><body> </body> </noframes></html>

  • 改・キーボードナビゲーション

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=762151 にて質問し、解決したに見えたのですが、確認もせず閉じた為、再度投稿させて下さい。 ページトップにフレームファイルを置き、 <frameset cols="250,*" frameborder="0" framespacing="0"> <frameset rows="16,*" frameborder="0" framespacing="0"> <frame src="***.html" name="0" SCROLLING="NO" NORESIZE> <frameset rows="25,*" frameborder="0" framespacing="0"> <frame src="***.html" name="1" SCROLLING="NO" NORESIZE> <frameset rows="51,*" frameborder="0" framespacing="0"> <frame src="***.html" name="2" SCROLLING="NO" NORESIZE> <frame src="***.html" name="3" SCROLLING="NO" NORESIZE> </frameset> </frameset> </frameset> <frame src="***.html" name="4" SCROLLING="NO" NORESIZE> </frameset> とします。 NAME“0”のページがメニューで、ここをクリックするとNAME“1”に開かれる仕組みです。 NAME0に、 function checkNavigation() { if(event.keyCode==49)location.href="NAME1に開くページ"; } window.document.onkeydown = checkNavigation; と書きます。 前投稿では、「1.location.~」とすればOKだとなっていたのですが、確認した所何故か機能しませんでした。 NAME0をアクティブページにして“1”を押下してみたり、試して見たのですが駄目でした。 どうしたら良いのでしょうか。お願いします。

  • 横スクロールバーを消したいんです(><)

    こんにちは。とっても困っています。 ホームページを作成中ですが横スクロールバーが消えません。以下の プログラムのどこを直したらいいでしょうか。 どうぞよろしく御願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> </head> <frameset rows="107,318*" cols="777*,1" frameborder="no" border="0" framespacing="0"> <frame src="vxv.html" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" /> <frame src="UntitledFrame-23"> <frameset rows="*" cols="122,652*" framespacing="0" frameborder="no" border="0"> <frame src="dfg.html" name="leftFrame" scrolling="No" noresize="noresize" marginwidth="0" id="leftFrame" title="leftFrame" /> <frame src="main.html" name="mainFrame" id="mainFrame" title="mainFrame" /> </frameset> <frame src="UntitledFrame-24"> </frameset> <noframes><body> </body> </noframes></html>

  • 画面の四分割の方法について

    教えていただきたいのですが、↓で作成した画面の最下部にbottom(titleと同じ幅で画面の下部)を作りたい場合は、どのように追加記述すべきなのでしょうか? いろいろ試しているのですが上手くいかないのです(汗 <frameset rows="90,*" border="0" frameborder="0" framespacing="0"> <frame name="title" src="title.html" scrolling="NO" noresize> <frameset cols="180,*" border="0" frameborder="0" framespacing="0"> <frame name="menu" src="menu.html" noresize> <frame name="body" src="body.html"> </frameset> </frameset> 宜しくお願いいたします。。。

    • ベストアンサー
    • CSS
  • フレーム使用時のページの更新について

    メモ帳で、縦3分割のフレーム使用のHPを作っております。 <frameset cols="150,*,150" Frameborder="no"> <frame name="hidari" src="top3.html" scrolling="no" noresize> <frame name="mannaka" src="top2.html" scrolling="auto" noresize> <frame name="migi" src="top4.html" scrolling="no" noresize> 一応タグの一部はこんな感じで打っています。hidariに各項目へのリンクがあるので、hidariから貼っているリンクはmannakaに表示されるわけです。 例えばmannakaにトップが表示されている時に、hidariからアバウトへのリンクに飛んだとしますよね。するとmannakaにアバウトが表示されますよね?その時に更新ボタンを押すと勝手にトップ画面に戻ってしまうのです。 自分のタグ打ちが悪いのかなぁ…と思い何度も見直してみたんですが分からずじまいで>< 他のフレーム使ってるサイト様ではちゃんと更新されているのに、どうしてだろうかと頭を悩ませております。 これを解消するにはどうすれば良いでしょうか?

    • ベストアンサー
    • HTML
  • フレームページが崩れる。。。

    フレームページを使っているのですが、見る人によってはページの一部が切れて 見えない部分もあるらしいです。ブラウザの大きさを変えてもレイアウトだけは 崩さない為には、どこにどんなタグが必要なんですか? 現在のフレームの親ページのソースです。 <FRAMESET rows="30%,70%" frameborder="NO" border="0"> <FRAME src="ue.html" scrolling="NO" noresize> <FRAMESET cols="20%,80%" frameborder="NO" border="0"> <FRAME src="side.html" scrolling="NO" name="menu" noresize> <FRAME src="main.html" name="main" noresize> </FRAMESET> <NOFRAMES>

    • ベストアンサー
    • HTML
  • フレームページのソース

    こんにちは。 フレームページのソースについて質問させてください。 <FRAMESET COLS="20%,*" BORDER=0> <FRAME NAME="menu" SRC="menu.html" scrolling="auto" NORESIZE> <FRAME NAME="main" SRC="main.html" scrolling="auto" NORESIZE> </FRAMESET> これを どこに入れるかですが、私が知っているソースの常識は、 1、</HEAD>のすぐ後には必ず<BODY> 2、</HTML> のすぐ前は必ず</BODY> です。これを守ってソースを書き込んでみると、 <HTML> <HEAD> <FRAMESET COLS="20%,*" BORDER=0> <FRAME NAME="menu" SRC="menu.html" scrolling="auto" NORESIZE> <FRAME NAME="main" SRC="main.html" scrolling="auto" NORESIZE> </FRAMESET> <TITLE>タイトル</TITLE> </HEAD> <BODY> <NOFRAMES> <P>サイトの説明</P> </NOFRAMES> </BODY> </HTML> このようになると思うのですが、 <HEAD>と</HEAD>に入れ込んでいいのでしょうか。 </HEAD>の下に持ってこようとすると 1、2、の常識に当てはまらなくなったりするのです。 他のサイトさんのソースを見てみますと 皆さん</HEAD>下に入れていらっしゃるようです。 トップページに使用しているのでとても不安です。 どなたか、自信のある方、教えていただけないでしょうか。

    • ベストアンサー
    • HTML
  • フレームの大きさを変更する 等

    index.htmlにフレームが定義してあります。 右・中央・左と言う感じで3つに区切っています。 <FRAMESET COLS="130,*,130" border="0"> <FRAME name="left" src="left.html" scrolling="no" frameborder="0" noresize> <FRAME name="main" src="main.html" scrolling="auto" frameborder="0" noresize> <FRAME name="right" src="right.html" scrolling="no" rameborder="0" noresize> <NOFRAMES> <BODY> <P>このページはフレームを使用しています<br>フレーム対応ブラウザーで閲覧してください。</P> </BODY> </NOFRAMES> </FRAMESET> これを、例えば中央のページのリンクをクリックすると、 フレームのサイズを変更することは可能なのでしょうか。 例 最初:<FRAMESET COLS="130,*,130" border="0"> ↓ サイズ変更リンクをクリック ↓ 変更後:<FRAMESET COLS="200,*,0" border="0"> このような感じです。 すみませんが、ご存知の方がいらっしゃいましたら、 ご教授をお願いします。 もしもよろしければ、簡単なサンプルコードもつけていただければ嬉しいです

  • フレームのホームページのサイズ指定の方法

    ●フレームのあるホームページを作ろうとしています。上段と下段左、下段右という3つの構成です。htmlでnoresize指定してもPC上でブラウザの窓を引っぱって大きさを変えると、それに連れて下段の幅が変わって(下段右のページが右にずれて)見えてしまいます。(IE6.0で見るとサイズ指定・固定されて見えるのですが、ネットスケープでは幅が違って見えます)これをどのPCで見ても、ブラウザの大きさがどうでも同じように(幅が変わらず)見せる方法を教えて下さい。 ●フレームのページのhtmlは以下のように記述しています。 <frameset border="0" bordercolor="#dddddd" frameborder="no" framespacing="0" rows="130,*"> <frame name="ue" noresize scrolling="no" src="xxxxx.html"> <frameset cols="202,580*" border="0"> <frame src="yyyyy.html" name="hidari" noresize scrolling="yes" > <frame src="zzzzz.html" name="migi" scrolling="yes" noresize > </frameset> ●いろいろ調べたのですが、解決できず、どなたか助けていただけましたら幸いです。何卒よろしくお願いいたします。

  • ブラウザによってフレームの表示が異なるのですが..

    はじめまして。 現在下記のような形のHPを制作しているのですが、フレームが難しくてなかなか進めません。 ブラウザやそれぞれの環境によって見え方が違ってしまいます。 私の環境では真ん中にぎゅっと詰まってスクロールが出てしまうような小さな見え方になってしまっています。 どの環境で見ても統一させるにはどのようにしたら良いのでしょうか。 ------------------------------ 上の固定バー ------------------------------ メニュー|内容     |     |     |     | ------------------------------ 下の固定バー ------------------------------ ソースは以下のように組みました。 <frameset rows="10%,*" cols="*" framespacing="0" frameborder="no" border="0"> <frame src="Margin/Index.html" scrolling="No" noresize title="topFrame"> <frameset rows="*,230" cols="*" framespacing="0" frameborder="no" border="0"> <frameset cols="215,*" frameborder="no" border="0" framespacing="0"> <frame src="Margin/Index.html" scrolling="No" noresize title="menuBarFrame"> <frameset cols="*,25%" frameborder="no" border="0" framespacing="0"> <frameset rows="64,*" frameborder="no" border="0" framespacing="0"> <frame src="topbar/topbar.html" scrolling="No" noresize title="topBarFrame"> <frameset rows="*,41" cols="*" framespacing="0" frameborder="no" border="0"> <frameset rows="*" cols="178,*" framespacing="0" frameborder="no" border="0"> <frame src="menu/menu.html" scrolling="No" noresize title="leftFrame1"> <frame src="top/top.html" name="main" title="topFrame"></frameset> <frame src="bottombar/bottomBar.html" scrolling="No" noresize title="bottomFrame1"> </frameset> </frameset> <frame src="Margin/Index.html" scrolling="No" noresize title="rightFrame"> </frameset> </frameset> <frame src="Margin/Index.html" scrolling="No" noresize title="MenuBarFrame"> </frameset> </frameset> <noframes> ------------- また、現在フレームは推奨されないのも知っているので、 オススメの組み方がありましたら教えていただけませんでしょうか。 HTML等に関してまったくの初心者ですので、判り易く教えていただけたら大変有り難く思います。どうぞよろしくお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう