• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フレームにすると)

フレームでウィンドウを閉じる方法について

このQ&Aのポイント
  • フレームでウィンドウを閉じるボタンの機能が正常に動作しない問題について質問です。
  • フレーム内でウィンドウを閉じるボタンの動作を有効にする方法を教えてください。
  • 初心者ですが、フレームでウィンドウを閉じるボタンが機能しない問題についてアドバイスをいただきたいです。

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

  • ベストアンサー
  • kokucho81
  • ベストアンサー率61% (157/255)
回答No.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();という修正が、簡単で、的を射てて、しかも、単体で表示してもエラーがでないので、一番よいのではないか? と思ってそのような答えとなりました。

hikariko
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kokucho81
  • ベストアンサー率61% (157/255)
回答No.1

状況から察するに、 function CloseWin(){ window.close(); } を function CloseWin(){ top.window.close(); } と修正すれば、99.99%閉じます。

hikariko
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A