あるフレームが開いた子ウィンドウを別のフレームが閉じるには?
[上に]
[前に]
[次に]
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() すれば良い、
ということになりました。
最後に「でっきあっがりー」を見て頂きたいところなのですが、他の部分でまだちょっと時間かかりそうです。
ご所望であれば、完成後、また宣伝に来ます。
[上に]
[前に]
[次に]