• 締切済み

閉じた後のwindow.closed検知

javascriptでwindow.closed()と関数の実行順序についての質問です。 以下のようなことを実現したいです。なお、(2)ではuserAgentではなく、画面が閉じているかどうかを検知してポップアップを出したいです。 --- (1)自画面の閉じるボタンで関数呼んでwindow.close()実行 (2)同じ関数内で、window.closeでは閉じない場合のみ検知してポップアップを出す --- 一つの関数では(もしくは複数関数を入れ子にしても)、window.closeのあとwindow.closed()の判定などを行おうとすると、window.closeで閉じるはずのブラウザで画面が閉じてくれません。 (window.closeで閉じるブラウザでは、そもそも(2)は実行されないのでは?と思ったり…) 初歩的な質問で申し訳ありませんが、とても困っています。 どうぞよろしくお願いいたします。

みんなの回答

回答No.2

そういう仕組みがあるんですね。 知りませんでした、すみません。 no.1の書き方で、私の環境では閉じました。 一瞬アラートが表示されて、それも一緒にすぐに。 windows vista + google chrome です。

回答No.1

window.close(); if(window.closed == false) { alert("閉じられませんでした"); } こうですか? これだと、閉じますが、一瞬アラートが表示されるんですよね。 window.close()で閉じないのってどういうときなんですか?

kdjnop
質問者

補足

ご回答ありがとうございます! window.close()で閉じないのは、以下の理由によります。 ・今回閉じようとしている画面はjavascriptで開かれた画面ではない ・ブラウザの中には(Firefoxなど)javascriptで開かれていない画面を javascriptで閉じることをセキュリティ的に許容していない(なので閉じない)ものがある 回答いただいたコードでもやってみましたが、 通常window.closeが効くはずのブラウザでも閉じないです… (1行目だけでなく、2~4行目の処理までやろうとして閉じないのかと思うのですが)

関連するQ&A

  • window update KB918899 javascript エラー

    先日、window updateを行ったところ、いままで動いていたwebページがエラーになりました。 エラー内容は、エラー:書き込みできません。 これは、ポップアップ画面が、クローズしているかの判断で、window.closedをチエックしている分部で発生しました。 これができないのであれば、ポップアップ画面そのものを否定することになりかねないのでは、と思うのですが。代替できるものがあるか、ご存知でしたら、教えてください。お願いします。

  • JavaScriptのWindow.openで!

    JavaScriptのWindow.openで! お世話になってます。 JavaScriptのWindow.openについてお聞きします。 現在JavaScriptで・・・ リンクボタン押下→ポップアップ画面表示→再度リンクボタン押下  →再度ポップアップ画面表示(ポップアップ開きなおし) ということをしたいです。 IE6,7,8で対応する必要があるのですが、IE8でうまくいきません(泣) IE8では、ポップアップ画面を別プロセスで開くみたいで、 ポップアップがどんどん増えていってしまいます。 開くポップアップは一つにしたいのですが、対策がわかりません。 何か方法はないでしょうか? どなたかご教授ください。

  • window.openでのブラウザ毎のサイズ指定

    お世話になります window.open("***.cgi","win","width=0px,height=0px") (***.cgiは計算処理などをしているだけなので表示はする必要はありません 処理が終わったらwindow.close()で閉じてます) これを実行すると IE6.0では左上に5cm角くらいのウィンドウが開いて(約2秒) Opera9.20では何も表示されない感じで Firefox2.0.0.3ではほぼフルサイズ(約2秒) のウィンドウになってしまいます 計算処理をするだけなので表示を見えなくするか最悪同じサイズのウィンドウにしたいのですがうまくいきません http://www.openspc2.org/reibun/javascript/sub_window/045/index.html こちらを試してみたのですがOpera,Firefoxでは同じサイズのウィンドウを開くのですがIE6.0では『Win,IE,6』というアラートが出てポップアップブロックされてしまいます ウィンドウ処理が自動生成になってしまうからだと思うのですがwindow.openでブラウザ毎のサイズ指定させることはできないのでしょうか?

  • window.closeもしくはwindow.opener.closeで警告を表示させない方法

    宜しくお願い致します。 ログイン画面を作っております。 ログインフォームからID、パスワードでログインした際に、子ウィンドウを表示させます。その際に、残った親ウィンドウを子ウィンドウが開いた際に閉じたいのですが、window.closeもしくはwindow.opener.closeで閉じると警告ダイアログが表示されてしまいます。この警告ダイアログを表示させない方法はありますか?window.closeもしくはwindows.opener.closeで警告を表示させない様にする事が不可の場合、同じ動作が出来る関数はありますか?

  • JavaScriptでPOSTで自ウィンドウのなりかわり表示させたい

    下記のJavascriptを使ってPostで遷移させたいのですが、 下記のままだと別画面が表示され、送信元ではwindow.close();を行っているためブラウザのセキュリティ警告で「閉じますか」のポップアップが表れます。 function link(err_flg){ var url = ""; if(err_flg == -1){ url = "err.html"; }else if(err_flg == 0){ url = "http://**.com/dir/direct.action"; } document.fm.action = url; document.fm.method = "POST"; document.fm.target = "aaa"; document.fm.subm.click(); window.close(); } POSTで渡し、警告ポップアップを表示させず且つターゲット名を指定し、自画面が成り代わる(http://**.com/dir/direct.actionのURLに対して)方法はございますか? よろしくお願いいたします。

  • window.openについて

    ブラウザのメニューバーやアドレスバーを非表示する為に色々と調べていますがうまく調べる事ができませんでした。 自分なりに調べて記述して実行してみましたが動きがバラバラで・・・ <SCRIPT type="text/javascript">   window.open('http://localhost/menu.html', 'menu', 'menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=no,left=0,top=0');   if(document.all){     window.opener = true;   }   window.close(); </SCRIPT> JavaScriptは使った事があまりなくどうか皆さんのお知恵を私にお貸し下さい。 対象のブラウザはIE、Firefox、Opera、Safariです。 申し訳ありませんがアドバイス等をいただけませんでしょうか。 些細な事でも何でも構いませんのでご教授宜しくお願いします。

  • window名の指定方法(close処理)

    いつもお世話になっています。 今回は、JavaScriptでのwindow.openの制御について質問いたします。 動きの流れとして 1.ログイン画面(以下、画面A)からログインを行うと ポップアップ画面(以下、画面B)を表示してからsubmit処理が走り、画面がリロードされる。 2.画面Aは消しても、別の画面(たとえばgoogleとか)に 遷移しても問題ない。 3.画面Aから再度ログインされた場合に、画面Bをとじなければならない。 こういう動きのときに、画面Bをあげるときに以下のように指定してやっています。 openDisp = window.open("pop.jsp", "pop", "width=300,height=200,top=100,left=70"); ここでこの画面Aがどこにも遷移できなくて、リロードもかからなければ、変数が活きるのでopenDisp.closedで 閉じられているかどうか確認できるのですが、リロードがかかるために変数が空になってしまいます。 そこで、変数にopenDisp = "pop"; とか書いてやって、openDisp.closedと書いてやると、 alertで出した結果は「undifined」と返ってきます。 このような場合、画面Bが閉じられているかどうかをチェックするにはどうしたら宜しいのでしょうか? 以上、よろしくお願いいたします。

  • IEのバージョンが7以下の際。ポップアップ表示

    こんにちわ。 今回やりたいことは、JavaScriptを使って、ブラウザのバージョンを判別し、メッセージウィンドをポップアップさせたいと思っています。 いかんせん、やっと最近HTMLとCSSの使い方がわかってきた程度で、JavaScriptは初心者です。(プログラム自身はVBAなどでそこそこ作っているので、なんとなくやり方はわかるんですが、実装が全く分かりません) 以下のようなサイトを見つけました。 http://jisakupc-technical.info/programing/javasc … 【以下ページ内のプログラム】 // ブラウザのUAを小文字で取得 var userAgent = window.navigator.userAgent.toLowerCase(); // IEの判定 var isIE = (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0); // IEのバージョンを取得 if (isIE) { // 正規表現によりUA文字列を配列に分割 var arr = /(msie|rv:?)\s?([\d\.]+)/.exec(userAgent); version = (arr) ? arr[2] : ''; return 'ie'+version; } else { // IE以外のブラウザ判定 if (userAgent.indexOf('chrome') != -1) { /* Google Chrome. */ return 'chrome'; } else if (userAgent.indexOf('firefox') != -1) { /* FireFox. */ return 'firefox'; } else if (userAgent.indexOf('safari') != -1) { /* Safari. */ return 'safari'; } else if (userAgent.indexOf('opera') != -1) { /* Opera. */ return 'opera'; } else if (userAgent.indexOf('edge') != -1) { /* Edge. */ return 'edge'; } else if (userAgent.indexOf('gecko') != -1) { /* Gecko. */ return 'gecko'; } else { return false; } } 分からないのが、Returnで返り値を返していますが、「どこ」に返しているのでしょうか? HTML構文内? この辺の、JavaScriptとHTMLの関連性がよく理解できていません。 最終的にやりたいのは、ブラウザがIEでかつ7以下もしくはIE8以上だが互換表示モードだとポップアップをさせたいということです。 何か良いアドバイスを頂けると大変助かります。

  • windowのクローズについて

    javascriptを以下のように利用する方法として より良い方法を教えてください。 現在、1つのフォームに2つのボタン(b1,b2)を利用して ・b1 を押すと新しいウィンドウ(w1)を作成(立ち上げる) ・b2 を押すとウィンドウ(w1)をクローズする というものを作成しています。 b1実行時の処理として w1 = window.open("about:blank","w1"); document.forms[0].target="w1"; retun true; b2実行時の処理として document.forms[0].target="_top"; if(!w1.closed)w1.close(); return true; このようにした場合、 一度、b1を実行してウィンドウ(w1)を立ち上げてから b2を実行すれば何も問題なくウィンドウ(w1)は閉じます。 しかし、b1を実行していない場合や、 ユーザが自分でウィンドウ(w1)を閉じた場合、b2実行時に IEで「ランタイムエラー w1が宣言されていません」 とエラーが出ます。 (エラーが出るだけで処理自体は問題ないようです) どのように記述すればエラーになりませんか?

  • window.openで新しいタブが開かない@Google Chrom

    window.openで新しいタブが開かない@Google Chrome ブラウザをGoogle Chromeに限定して質問させていただきます。 window.openでページを新しいタブで開きたいのですが、どうしてもポップアップで出てしまいます。 しかも、同じ関数を使用しているのにタブで開いたりポップアップで開いたりします。 使用中のコードは以下の通りです。 <html> <head> </head> <body> <p id="p">click</p> <select id="select"> <option>1</option> <option>2</option> </select> <script> <!-- var p, select; window.onload = function() { p = document.getElementById("p"); select = document.getElementById("select"); p.onclick = open_win; select.onchange = open_win; } function open_win() { window.open("http://www.google.co.jp/", "_blank"); } //--> </script> </body> </html> 上記のソースを記述したページにて、p要素をクリックすると新しいタブが開き、select要素で項目を選択するとポップアップが開いてしまいます。Chromeの仕様、あるいはバグなのでしょうか。 新しいタブでのオープンに統一したいのですが、何か良い方法がありましたらご教授お願い致します。

専門家に質問してみよう