あるフレームが開いた子ウィンドウを別のフレームが閉じるには?

[上に] [前に] [次に]
yelp 2000/03/17(金) 09:50:13
ブラウザ画面を2つのフレームに切り、
<frame src="gallerytitle.html" name="framegallery1">
<frame src="gallery01.html" name="framegallery2">
としています。
(この FRAMESET 自体《ネストではなくて》親フレーム内に表示されています。)

この時、"gallery01.html"からJavaScriptで、
var imf;
function IFO(fln,imn ,ctg,bgc){
imf = window.open("","imageframe");
imf.document.open();
imf.document.writeln("<html>");
(中略)
imf.document.writeln("</html>");
imf.document.close();
imf.focus();
}
として新しく開いた子ウィンドウを、
"gallerytitle.html"が onUnload の時に閉じることは可能でしょうか?

以下の様にして試してみたのですが、これだとIEでは機能しても、NNでは
「window.parent.framegallery2 はプロパティを持っていない。」
と言われてしまいます。

<head>
<SCRIPT LANGUAGE="JavaScript">
  <!---
   function IFC(){
    window.parent.framegallery2.imf.close();
   }
  //--->
</SCRIPT>
</head>
<body onUnload="IFC()">

以上、よろしくお願いします。

らてる 2000/03/17(金) 10:24:45
imf.close();
だけで、閉じたりしませか?

yelp 2000/03/17(金) 11:11:36
らてるさん、さっそくのご回答、ありがとうございます。

今回は子ウィンドウを開くフレームと閉じるフレームが別なので、ご指摘の方法だと
「imf は定義されていない。」
になってしまいます。
同じフレーム内からでしたら、これでOKなんですが。

cobalt 2000/03/18(土) 02:22:20
gallerytitle.html 側の
IFC() の中身を次のように書き換えてみては如何でしょうか?
    var OtherWin;

    OtherWin = window.open("","imageframe");
    OtherWin.close();

つまり、人の変数をアテにするのではなく、自分で子ウインドウを取得するって事なのですが。
window.openは、指定した名前のウインドウがある場合、もう一個開くのではなく、既に存在する
ウィンドウを返すようです。

因みに、私の環境はNN4.04で、下記のURLにサンプルを作ってみました。
http://www2.ocn.ne.jp/~cobalt/sample.htm

試しに作った物なので、私の気分次第で消すかも知れません。 (^^;
飛べなかったらごめんなさい。 m(_ _)m

なお、私はNNでしかテストしていませんので、IEでどうなるかは解りません。
(私のIEは3だし・・・ (爆))

yelp 2000/03/18(土) 14:54:29
[[解決]]
cobaltさん、ご回答ありがとうございます。

サンプル拝見致しました。Win95+IE4でも動作しました。

この方法は、以前もこのラウンジの投稿で見たことがありますが、ウラ技的で面白いですね。
ただ、
>指定した名前のウインドウがある場合、もう一個開くのではなく、
>既に存在するウィンドウを返すようです。
ということを知らなかったので、今回は試してみていませんでした。


さて、件のスクリプトの方は、結局、自力で解決することが出来ました。
問題は、
>(この FRAMESET 自体《ネストではなくて》親フレーム内に表示されています。)
という点にあったようです。

つまり、
>"gallerytitle.html"が onUnload の時
とは、この FRAMESET 全体が更新、または閉じられる時だったので、
イベントが発生した時には、同時にimf を保持している gallery01.html が更新、または閉じられていて、
close() メソッドはこれにアクセスできなかった、ということのようです。

そこで、
var imf;
を gallerytitle.html 内に移動し、gallery01.html からここにアクセスして子ウィンドウを開くようにしました。
こうすることで、imf は gallerytitle.html の子ウィンドウに出来、後は単純に close() すれば良い、
ということになりました。


最後に「でっきあっがりー」を見て頂きたいところなのですが、他の部分でまだちょっと時間かかりそうです。
ご所望であれば、完成後、また宣伝に来ます。

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