- ベストアンサー
ログイン後の処理でIEで画面が閉じるエラーが発生する問題について
- WEBアプリを作成している際に、ログイン後の処理でIEで画面が閉じるエラーが発生しています。
- window.openを使用してアドレスバーやツールバーを非表示にし、画面を表示する処理を行っています。
- 特定のクライアントパソコンからログインすると、window.open後に一時的に画面が閉じられる問題が発生しています。IEのバージョンは6.0.2900 5512です。原因を突き止めるためにアドバイスをお願いします。
- みんなの回答 (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
その他の回答 (2)
- Hardking
- ベストアンサー率45% (73/160)
何がしかの例外が発生してるっぽいですね。 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(); }
お礼
Hardkingさん、ありがとうございます。 subwindowの存在チェック、やってみましたが 存在していても「無い」と判断されました。(alertで確認) でも、存在しているwindowに上書きされるので、問題は無いのですが。。。
- yyr446
- ベストアンサー率65% (870/1330)
今のIEは知りませんが、昔のIEは、javascriptで、 window.open / window.close を何度も何度も繰り返すと、 メモリーリークが溜まっていき、ある時ハングアップします。 これに関係してるのかも知れないですね。 原因はマイクロソフトさんでしか究明できないのでは、といっても、 もうサポートしてないし。 現行のIEで問題が出ないようであれば、古いIEは切捨て、「そのWebアプリは 必ずIE Ver.X 以上で」使ってください」の旨の説明をつけるしかないのでは ないでしょうか。いまさら、作り直せないでしょ。
お礼
yyr446さん、ありがとうございます。 IE6以上を推奨とうたってまして・・・、そこも指摘されてしまいました。^^; メニューバーやアドレスバーを表示させたくなくてwindow.openに変更したんです。 メモリリーク、もうちょっと調べてみます。
お礼
think49さん、ありがとうございます。 まさしく、window.openの返り値をローカル変数で受け取ってました! グローバルに変えて試してみます。 いまのところ、発生するのはIEの6.0.2900 5512だけです。他のIE6はないので試せません。 IE7,IE8では発生しませんでした。(正常に動作します) ※別件ですが、IE7ではopen時に指定してもURLアドレスバーって消えないんですね。 (今、試してみて表示されてるのであわてました!) その後ですが、 何度もキャッシュのクリアやら、パソコンの立ち上げ直しとかやってくださり、 いまでは画面が消えることはなくなったのですが 最初の画面から値を渡してるのですが、値は取れず「不正」(・・・自作のerror)の表示になります。 でも何回も同じ事(不正の画面から戻って、また入力して不正になってを繰り返す)をしていると いつかは正常に値がわたるようになりました。 でも、IEを閉じて再度起動するとまた同じですが。 メモリリーク、調べてみます。 検出ツールまで教えていただき、ありがとうございました!