• ベストアンサー

ウィンドウが閉じようとしていることを知るには?もしくは、×をつかってウィンドウをとじれなくするには?

いつもお世話になります。 表題のとおりなのですが、 Window.open でサブウィンドウを開いて、そのウィンドウが閉じられたことをリアルタイムに知るにはどうすればいいでしょうか? サブウィンドウのunloadイベントハンドラを使用してみましたが、ブラウザの×を押されるとイベントハンドラに通知がきません。 確実にウィンドウが閉じられることを知る方法はないでしょうか? よろしくおねがいします

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

  • ベストアンサー
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

これが最善の策かはわかりませんが、元のウィンドウ内で定期的にサブウィンドウの状態をチェックしにいけば(多少のタイムイラグはあるが)確実に終了されたことをチェックできます。 <html> <script> var w; function onClick() { w = window.open( "http://www.goo.ne.jp/", "_blank", "width=200,height=200" ); setTimeout( "checkSubwin()", 500 ); } function checkSubwin() { if( w.closed ){ alert( "サブウィンドウ終了" ); } else { setTimeout( "checkSubwin()", 100 ); } } </script> <body bgcolor="#FFFFFF" > <input type="button" value="open" onClick="onClick();" style="background-color: #FFFFFF;border-color: #FFFFFF;border-style:solid;cursor:pointer;" > </body> </html>

その他の回答 (1)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

残念ながら、Javascriptがブラウザ上で動いているため、ブラウザが終了することを阻害するような動作をすることは出来ません。 極端な例ですが、パソコンのソフトウェア上から、コンセントを抜いて電源を切ってしまうことを阻害することは出来ないことと同じです(パソコンから手が出てきて腕をつかまれたらそれは既に超常現象でしょ?)。 ただ、終了したことを感知するだけでいいなら、#1氏の回答にあるとおり、(リアルタイムではありませんが、)親ウィンドウから子ウィンドウのclosedプロパティを参照することで可能ですね。

関連するQ&A

  • 親ウィンドウから開いた子ウィンドウをまとめて閉じるには?

    親ウィンドウから複数のサブウィンドウを開いたとします。親ウィンドウを閉じる際に、開いているサブウィンドウを全て閉じたいと思っています。 開いたサブウィンドウのwindowオブジェクトを控えておいて、親ウィンドウのunloadで順番に閉じていけばできますが、イマイチかっこいい処理ではないので、一括してcloseできる処理を考えているところです。 なにかいい方法はないでしょうか?

  • IE7におけるonresizeイベントハンドラについて

    お世話になります。 IE7を使用しているのですが、window.onrisizeイベントハンドラがうまく機能しないようなのですが、これはIE7の仕様なのでしょうか? また、IE7以外のブラウザでwindow.onrisizeイベントハンドラが機能しないようなブラウザはあるのでしょうか? ご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • サブウィンドウから親ウィンドウのファンクションを起動

    おせわになっております。 サブウィンドウから親ウィンドウのファンクションを起動する方法について困っています。 親ウィンドウから var subWin = window.open("a.html", "sub") でオープンしたサブウィンドウを閉じる場合に サブウィンドウから親ウィンドウの function sub_close() { subWin.close(); } を呼び出して閉じる処理をしています。 (サブウィンドウでwindow.opener.sub_close()) #これは正常に処理されます。 ここで問題なのですが、サブウィンドウがフレームの場合に、フレームセットされたHTMLから window.opener.sub_close() というような方法では親画面の操作ができないのでしょうか?(できませんでした。) 初歩的な質問で申し訳ないのですが、何かよい方法があれば教えてください。 宜しくお願いします。

  • onbeforeunload時のwindow.openが効かないのです

    onbeforeunload時のwindow.openが効かないのですが… ページ内に設置した「閉じる」ボタン、またはブラウザの「閉じる」を押したときに、 新規ウィンドウが立ち上がるようにしたいのです。 複数台でテストすると、半数が新規ウィンドウが立ち上がりません。 まずIEでunloadが効かない場合がある事から、 以下サイトよりonbeforeunloadのスクリプトを引っ張りました。 http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/ で、 <SCRIPT LANGUAGE="JavaScript"> ~上部省略~ function unload() { //alert('Unload event occured.'); window.open('test_b.php'); }; </script> <body onbeforeunload="unload()"> と記述したのですが、 前述で新規ウィンドウが立ち上がらなかった台が、 アラートだと出すのですが、window.openに反応しません。 何か解決方法はありますでしょうか。 javascriptに関して全くの初心者ですので、四苦八苦しながらテストしています。 もし解決方法をご存じの方はソース例を教えて頂くと大変助かります。 宜しくお願いします!

  • ウィンドウのタイトル

    いつもお世話になります。 window.openでExcelファイルをブラウザで開いているのですが、ウィンドウのタイトルバー(青い部分)にURLが表示されています。 そのタイトルバーのURLを指定の文字にしたいのですが、可能でしょうか? 以下のようなスクリプトでウィンドウを開いています。 function FileOpen(sUrl) { if (sUrl != "") { var oWin = window.open(sUrl,"_blank","titlebar=no,toolbar=no"); } } よろしくお願いします。

  • ウィンドウの2重起動を防止したい

    こんにちわ! javaScriptからwindow.open()でサブウィンドウを 開いている状態で、再度リンクをクリックした場合は なにもしないようにしたいのですが、現在は、しかたなく 開かれているサブウィンドウに再度同じページを表示 するようにしています。 もし、現在サブウィンドウが開かれている場合は 親ウィンドウのリンクをクリックしても無効とする 方法があれば教えて下さい.

  • 変数の値によってsubmit後の動作を変更する

    サブミットで送った値が正しければwindow.openでサブウィンドウを開き、間違っていればalertでメッセージを出す、というふうなことは可能なんでしょうか? サブミットボタンにonclickイベントでwinopenを組み込んでいたんですが、それだと値が間違っているときでもサブウィンドウが開いてしまうので… よろしくお願いします。

  • サブウィンドウを開くと親ウィンドウが上に戻ってしまう

    ページ途中のリンクからJavaScriptでサブウィンドウを開くとき、親ウィンドウが上に戻ってしまいます。 これをリンク位置でサブウィンドウが開くようにしたいのです。 どのようにすれば親ウィンドウが動かなくなりますでしょうか。 サブウィンドウ用のJavaScript function wopen1(){ window.open("aaa.htm","plain","scrollbars=yes"); } リンク側 <a href="#" onClick="wopen1()"> どうぞよろしくお願いいたします。

  • window.open()使用サブウィンドウをモーダルにする方法

    struts + jspで開発を行っています。 window.open()を使用してサブウィンドウを表示する際にサブウィンドウをモーダル化したいと思っていますがうまくいきません。どうすればモーダル化出来るでしょうか?以下のパターンはなしとさせてください。 1.showModalDialogの使用  理由)submitを行った際に新規にウィンドウが開くため 2.onblurの使用

  • ウィンドウとテーブル

    みなさん。たびたびすいません。お願いします。 今親ウィンドウで、 テーブルをつくり、各セル事に同じ子ウィンドウ(入力画面)へ飛ぶリンクをはっています。 そしてinnerTextを使って、その入力した結果を1つ1つのセルにもっていき書き換えるということをしたいのですが、ここで全て同じリンク先、そしてwindow.openでやっているためセルやテーブルのidの橋渡しができず、セルの分、入力サブウィンドウhtmlが必要になってしまうと考えてしまうのですが、1つのサブウィンドウでできる方法はあるのでしょうか。

専門家に質問してみよう