ログイン後の処理でIEで画面が閉じるエラーが発生する問題について

このQ&Aのポイント
  • WEBアプリを作成している際に、ログイン後の処理でIEで画面が閉じるエラーが発生しています。
  • window.openを使用してアドレスバーやツールバーを非表示にし、画面を表示する処理を行っています。
  • 特定のクライアントパソコンからログインすると、window.open後に一時的に画面が閉じられる問題が発生しています。IEのバージョンは6.0.2900 5512です。原因を突き止めるためにアドバイスをお願いします。
回答を見る
  • ベストアンサー

WEBアプリを作成しています。

WEBアプリを作成しています。 ログイン後の処理として、アドレスバーやツールバーを表示させないよう、 JavaScriptでwindow.openし、 そのwindowの中にcgiアプリで画面を表示する処理をしていくアプリを作成しました。 順調にすすみ、社内の最終確認試験段階ですが、 ある方のクライアントパソコンからログインすると open後、何秒後かにcloseしてしまいます。 javascriptの処理として、window.openした後、親(ログインしたwindow)はcloesしています。 window.openの戻り値がダブっていたとしても、上書き表示されるだけで 自分を消す処理は入っていないのですが、一時的にcloseするのは止めてみました。 その後、IEのセキュリティなどを見てもらい、キャッシュのクリアやいろいろやってもらったのですが 画面が閉じるのは無くなったのですが 今度は、IEのエラー画面「・・・問題が発生しました・・・」の画面を表示して 処理すらできなくなってしまいました。 IEが古いのでは?と思い、バージョンを確認させてもらったところ    IE6.0.2900 5512 でした。 こんなことってあるのでしょうか? window.openを使用するのは、あまり良くないのでしょうか??? 一応IEのバージョンアップ・・・をお願いしたのですが お客様のところでも同じ現象になる可能性もあるので 原因を突き止めないといけません。 なにかアドバイスいただければと思います。 よろしくお願いします。

  • jg1wjz
  • お礼率91% (148/162)

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

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.3

メモリリークしているのかもしれませんね…。 [FIX] window.open 関数呼び出しのメモリ リーク http://support.microsoft.com/kb/235674/ja window.openによるメモリリークはIE5.01で修正されていますが、IE6にもメモリリークパターンがあり、そちらに該当している可能性はあります。 Internet Explorer リーク パターンを理解して解決する http://msdn.microsoft.com/ja-jp/library/bb250448 掲示板/クロージャでメモリリークするパターン - TAG index http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view2&f=2586&no=8- > window.openを使用するのは、あまり良くないのでしょうか??? IE6の場合、window.open() にメモリリークの引き金となるものはありませんが、返り値をローカル変数で受け取っていた場合はリークパターンになる可能性があります。 function hoge(){  var win = window.open('http://example.com/', 'foo');  document.getElementById('test').onclick = function(){   // win を参照し続けるため、循環参照する  }; } > お客様のところでも同じ現象になる可能性もあるので、原因を突き止めないといけません まず、問題が発生する環境を特定してみてください。 具体的には、 ・どのブラウザで再現するのか?(IE6だけなのか。IE7やFirefox3.6などは無関係なのか。) ・再現するブラウザにおいて、何らかのスクリプトエラーも発生するのか?  http://msdn.microsoft.com/ja-jp/library/z959x58c.aspx ・開発者ツールのコンソール画面でエラーメッセージを確認できないか?(問題なく動いているように見えるブラウザも念のため確認しておく)  http://www.tagindex.com/cgi-lib/q2bbs/patio.cgi?mode=view2&f=2251&no=6- ・タスクマネージャを開いた状態で「CPU使用率」「メモリ使用量」がどのように推移するか? ・メモリを際限なく消費していた場合、どこでリークしているのか? [JS]MicrosoftからJavaScriptのメモリリーク検出ツール | コリス http://coliss.com/articles/build-websites/operation/javascript/773.html

jg1wjz
質問者

お礼

think49さん、ありがとうございます。 まさしく、window.openの返り値をローカル変数で受け取ってました! グローバルに変えて試してみます。 いまのところ、発生するのはIEの6.0.2900 5512だけです。他のIE6はないので試せません。 IE7,IE8では発生しませんでした。(正常に動作します)  ※別件ですが、IE7ではopen時に指定してもURLアドレスバーって消えないんですね。   (今、試してみて表示されてるのであわてました!) その後ですが、 何度もキャッシュのクリアやら、パソコンの立ち上げ直しとかやってくださり、 いまでは画面が消えることはなくなったのですが 最初の画面から値を渡してるのですが、値は取れず「不正」(・・・自作のerror)の表示になります。 でも何回も同じ事(不正の画面から戻って、また入力して不正になってを繰り返す)をしていると いつかは正常に値がわたるようになりました。 でも、IEを閉じて再度起動するとまた同じですが。 メモリリーク、調べてみます。 検出ツールまで教えていただき、ありがとうございました!

その他の回答 (2)

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

何がしかの例外が発生してるっぽいですね。 try~catch文で例外回避するのはどうでしょうか。 <script language="JavaScript"> <!-- var hWin; function wopen() { //サブウィンドウの存在チェック if (hWin && !hWin.closed) { hWin.focus(); return; } try { hWin = window.open(XXX, "", XXXX); hWin.focus(); } catch(e) { hWin.focus(); } } // --> </script> try { //ActiveXのフォーカスのアクティブ対応 hWin = window.open("", WinVal, WinAttr); hWin.document.open(); hWin.location.href = "http://202.239.37.114/~forex24/dws_flash/dws_chart07.php?refcd=" + p_code; //hWin.location.href = "http://202.239.37.114/~forex24/java/livechart/ivshow.php"; hWin.document.close(); hWin.focus(); } catch(e) { hWin.focus(); }

jg1wjz
質問者

お礼

Hardkingさん、ありがとうございます。 subwindowの存在チェック、やってみましたが 存在していても「無い」と判断されました。(alertで確認) でも、存在しているwindowに上書きされるので、問題は無いのですが。。。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

今のIEは知りませんが、昔のIEは、javascriptで、 window.open / window.close を何度も何度も繰り返すと、 メモリーリークが溜まっていき、ある時ハングアップします。  これに関係してるのかも知れないですね。 原因はマイクロソフトさんでしか究明できないのでは、といっても、 もうサポートしてないし。 現行のIEで問題が出ないようであれば、古いIEは切捨て、「そのWebアプリは 必ずIE Ver.X 以上で」使ってください」の旨の説明をつけるしかないのでは ないでしょうか。いまさら、作り直せないでしょ。

jg1wjz
質問者

お礼

yyr446さん、ありがとうございます。 IE6以上を推奨とうたってまして・・・、そこも指摘されてしまいました。^^; メニューバーやアドレスバーを表示させたくなくてwindow.openに変更したんです。 メモリリーク、もうちょっと調べてみます。

関連するQ&A

  • 親ウィンドウの非表示

    JavaScriptで、 「アドレスバー・ツールバー等非表示でトップ画面を開く」 を以下のように1画面クッションをおいて うまく非表示になったのですが、 クッションをおいた画面が2秒ほど表示されてしまいます。 うまく非表示にする方法をご存知のかた教えてください。 <script language="javascript"> <!-- window.open("","","menubar=no"); if (document.all&&(navigator.userAgent.match(/MSIE (\d\.\d)/),RegExp.$1)>=5.5) {   var w=window.open("","_top")   w.opener=window   w.close() } else {   window.close() } //--> </script> よろしくおねがいします。

  • Webアプリを開発しています。

    Webアプリを開発しています。 セキュリティを含め、いろいろな問題の対処で、最初にログインしたら windowのサイズ指定のメニューバー無し、アドレスバー無しで window.openし、その上で全ての画面遷移&処理を行うようにしました。 が、画面の中で、右上の「×」ボタンが押されるとサーバ上に 仮で作成したファイルが残ってしまう場合があります。 システムの仕様上、必要なファイルで「保存」などの別ボタンクリックで本登録になり、その時に仮登録を削除しています。 (当然、画面上に作成した「戻る」や「終了」ボタンクリック時も対処はしています) 「×」ボタンの制御をネットで検索して、onbeforeunload() という関数を入れてみました。 ブラウザにより、clienrXの値が、正になったり負になったりするようで、それらの判断ではなく 幸い(?)、 動いているwindowは自分で指定していてサイズの変更はできないようにしているため body.clientWidthの値がわかることと、 「×」をされては困るのはある一部の画面のときのみなので、その画面作成(cgi return)のときのみ Bodyタグに onbeforeunload=="Keikoku()"などと入れて、 function Keikoku( ) { if( document.body.clientWidth==900 ) alert("!!!");  <-- たとえば } } など、せめて警告だけでもしたいのですが、   (本来は仮ファイルがあったら削除する処理を埋め込みたいのですが・・・) この方法は、有効とお思いでしょうか? 組み込んだほうがいいのか(方法として合っているのか)どうか 判断がつきかねています。 よろしくお願いします。

  • 子画面から親画面をクローズしたい

    子画面から親画面をクローズすると確認メッセージが表示されます。 非表示の方法はありますか? 現在の処理内容:  親画面:   ボタン押下時 onclick="window.opener='main';window.open('URL');return false;"  子画面:   onload時 window.opener.close(); 確認ブラウザ:IE10、Chrome43  ※IE10では表示されるが、Chrome43では表示されない。

  • window.close()?でエラー

    javaScriptのwindow.close()で「プログラムにコマンドを送信している時に、エラーが発生しました」と言うエラーが出てしまいます。 但し、Windowは正常にクローズされています。 親画面から子画面をオープンし、子画面のオープン後に親画面自身をクローズしている処理です。 window.opener = window; window.close(); でクローズしています。 宜しくお願いします。

  • 遷移後の画面クローズができない

    前提: ・ASP.NET ・Chromeブラウザ、バージョン:43 閉じる処理を画像リンクで行い、 記述は<a href="javascript:window.close()">としています。 初期画面はクローズすることができますが、 別画面へ遷移すると遷移先の画面では上記記述でクローズすることができません。 ※リンクをクリックしても何も動作せず。 ※IEでは正常に動作し、画面クローズできます。 ※画面オープンは、「Response.Redirect("URL");」としています。 解決策があれば教えてください。

  • IEで新しいウィンドウをOpenするときに

    IEで新しいwindow(例えば、メールフォーム)をオープンする時に、Javascriptを使用すれば、アドレスバー等を非表示にすることができることはわかつていますが、この場合にウィンドウのTITLEに指定している文字列の前に、URLの様なものが表示されてしまい困っています。 というのは、ホスティング屋さんのサーバを借りているため、SSLのメールフォームだけは、共用SSLで動くために、自分のドメインではなく、ホスティング屋さんのドメインで表示されてしまうため、これを防ぐにあたりアドレスバー非表示で画面を開くようにしたのです。 そうしたところ、当然アドレスバーは非表示になりましたが、前述したとおりwindowのタイトルに、「http://xxxx.ne.jp/ メールフォーム」と表示されるようになってしまったのです。(xxx.ne.jpはホスティング屋さんのドメイン) ネスケだとこういう現象は発生しないのですが、IEで防ぐ方法はないのでしょうか?

  • 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でブラウザ毎のサイズ指定させることはできないのでしょうか?

  • WEBアプリで管理者ログイン機能はどう作る?

    WEBのアプリで、管理者しか入れないページを作りたいのですが、 ログイン画面を作り、パスワードを確認する画面を作ったとしても、 後続の画面のURLをバーに入力すれば、後続画面には誰でもアクセス可能ですよね。 通常、このような管理者画面はどのように作成するのでしょうか? 一般的な方法があれば、教えて下さい。 現在言語はASP.NETで作成中ですが、javascriptなどは組み込み可能です。 (ソースを知りたいと言うより、管理者ONLY画面の仕組みなどが知りたいです)

  • WEBアプリ作成について

    以前も似たような質問をさせて頂いたものですが、WEBアプリ作成にあたってお尋ねしたいことがあります。作るアプリの動作としては、ブラウザ上に画像を貼り、その上に自分で指定した座標上に下の画像がわかるようにぼかした図形をいくつか描き、それをクリックするとデータベースからデータを取得してきて表示するという動きのものです。 調べたところ、上記のものを実現するためには、HTML,JavaScript,Javaだけでは難しいでしょうか。 HTML5のCanvas機能を使えばそれは可能でしょうか? 回答お待ちしております。

  • JavaScriptのWindow.openで!

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

専門家に質問してみよう