dポイントプレゼントキャンペーン実施中!

はじめまして。
javaについては全くの素人です。
お力を貸していただきたくて投稿いたしました。

以下の様なページを作り、

<HEAD>
<TITLE>ウィンドウを閉じる</TITLE>
<SCRIPT language="JavaScript">
<!--
function CloseWin(){
window.close();
}
// -->
</SCRIPT>
</HEAD>
<FORM>
<INPUT type="button" value="ウィンドウを閉じる" onClick="CloseWin()">
</FORM>
</BODY>
</HTML>
テストしたら、「ウィンドウを閉じる」ボタンは機能したのですが、このhtmlファイルをフレームの一つのして読み込むと機能しません。
なぜなんでしょうか?
どのようにすれば、機能するようになるのでしょうか?
大変初歩的な質問ですが、周りにだれも教えてくれるものがいませんので困っております。
よろしくお願いします。

A 回答 (2件)

今仮に、左右にフレーム分けしているトップファイルindex.htmlと、


構成ファイル、left.htmlとright.htmlとしましょう。

そして、right.htmlから、「閉じる!! window.close()」というJavaScript信号をブラウザに送るとします。
window.close()のwindowとは、right.htmlにとって、自己面、自己フレームを指しますので、right.htmlを表示しているフレームだけを閉じようとします。
この時起きうる現象としては次のどちらかでしょう。
(1)right.htmlが閉じて、表示するものが無くリンクし損ねたダミーページ(IEとかだと「ページが表示できません」)と出る。
(2)frame構成内に表示している場合、frameが、close()信号を受付けず、結果、特定のフレームだけを閉じることは出来ない。

おそらく、それぞれのwindowのトップに表示されているhtmlのclose()関数を呼び出してやらないと、閉じない、閉じれない仕様になっているのだと思います。

なぜ、特定のフレームだけを閉じることができないのか!! についてははっきりと明言できませんが、そういったような仕様にでもなっているのではないでしょうか(仕様を作成した側の人間ではないので、自信はないですが)

さて、ところで、今回hikarikoさんのやりたいことは、文脈から察して、私は、「特定のフレーム」ではなく、「ウィンドウ」を閉じたいのではないか? と判断しました。(だからtop.うんぬんと答えました)

では、なぜtop.を付け加えたのか?
topとはこの場合、index.htmlを指します。そう、right.htmlは自分のclose()関数ではウィンドウを閉じる権限をどうやらもっていないようなので、topに表示されているHTMLの(ウィンドウを閉じる権限がある)関数を呼び出してやろうというわけです。同様に、このような構成に限ってはparent.window.close();でも良いでしょう。
では、topでもparentでも良いのになぜtopと答えたか?
もし、right.htmlが単体(フレームの中ではなく)で表示されていたとしたら?
parentでは、親(index.html)を探そうとしますが、単体で表示されているときは、親がいませんから、エラーとなります。しかし、topと記述しているときは、単体で表示されているときは、right.html自身が今度はtopとなりますから、やはり、問題なくtop.window.close()で、問題なく、自分自身を閉じることが出来ます。

というわけで、状況から考えて、
top.window.close();という修正が、簡単で、的を射てて、しかも、単体で表示してもエラーがでないので、一番よいのではないか? と思ってそのような答えとなりました。
    • good
    • 0
この回答へのお礼

ご丁寧な回答本当にありがとうございました。
とてもわかりやすくスマートなご回答で、疑問が全て解決いたしました。
私の勉強不足のから生じる質問に答えていただき本当にありがとうございました。

お礼日時:2001/01/23 16:54

状況から察するに、



function CloseWin(){
window.close();
}



function CloseWin(){
top.window.close();
}

と修正すれば、99.99%閉じます。
    • good
    • 0
この回答へのお礼

ありがとうございました。上手くいきました。
なぜtopを追加すれば動くようになったのでしょうか?
もしよろしければ、理由も教えていただけますと嬉しいです。
よろしくお願いします。

お礼日時:2001/01/23 08:52

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