none
showModalDialog時の動作がおかしい RRS feed

  • 質問

  • window.showModalDialog()によるポップアップウィンドウ側で動作が以下のような事象が発生してしまいます。
    再現環境は、Windows XP上のIE7とIE8双方で確認しています。再現確認したマシンは10台中10台とお考えください。


    ①Visual Web Developerのブレークポイントが想定通り打てない場合がある
     showModalDialogで出したウィンドウで読み込んだJavaScriptファイルに対して、ブレークポイントなどが打てるのはよいと思っていますが、共通ファイルなどファイル名が同じファイルの場合に、ブレークポイントを打とうとしたとたん、親ウィンドウ側のスクリプトファイルに切り替わりそこにブレークポイントが打たれてしまい、目的の箇所に打つことが出来ない状況になります。別ウィンドウのデバッグってこんなもんなんでしょうか。


    ②JavaScriptでエラーが発生した場合に、エラー箇所やエラーの発生有無が検知出来ない。
     何を言ってるんだと思われるかも知れませんが、本当です。
     これは単純なJavaScriptでは再現しませんが、大量のJsまたはコードを読み込んでいる場合において、発生するようです。
     ラインタイムエラー自体の検知が行われなくなるという現象です。これにはかなり困っています。
     もちろんJavaScriptのラインタイムエラーが発生するようなコードを作成してしまうのが問題なのですが、それの発生有無や発生個所が全く分からないため、手が付けづらい状況に追い込まれます。
     どのような条件で、事象が発生するようになるかは分かっていませんが、一定規模のJSやCSSが存在すると発生するようです。
     この場合、window.onerrorは発動しませんし、ブラウザ左下のエラー一覧にも表示されません。要はエラーの発生有無すら分かりません。問題となる「存在しない変数にアクセスした」などのJavaScriptのランタイムエラーを取り除けばもちろん事象は発生しなくなりますが、そもそも事象が起きたことすら運が良くないと分かりません。
     setTimeoutやイベントハンドリングの一番大元にて、try catchを行うことでエラーが発生したかどうかだけは分かりますが、エラーオブジェクトからは、エラー発生ファイル、行数は得ることは出来ません。
     しかも、この場合にVWDにてコールスタックを確認して見ると呼びもしない関数が何度も呼ばれているような表示となっています。親ウィンドウだと勘違いして呼び出し履歴を表示しようとしているのか、そもそも呼び出し履歴ですらブラウザ内部で把握出来ない状態となっているのか分かりかねますが、そのような動作となります。


    ③CSSの読み込み可能ファイルサイズに上限がある。
     同じCSSファイルを親画面で読み込んだ場合は問題ないのですが、たしか大体CSSファイルのファイルサイズが200kByteあたり(かなり記憶があいまいなので目安程度とお考えください)を超えたあたりで発生するようです。
     他のブラウザでは読めているため、CSSの構文がおかしいというわけではないでしょう。ファイルの中身の前半後半を入れ替えたとしても、一定ファイルサイズを超えた時点で以降の定義が読み込まれておらず画面に適用されません。
     ネットワークに問題はありませんでした。
     また、CSSのファイルの中身に問題があるかと思って調査してみましたがどうやらファイルの行数またはファイルサイズが問題となっているようです。
     結局CSSファイルを分割することで対応可能でした。


    ④document.body.offsetWidthなどブラウザ全体のサイズの動作が、window.openで開いたウィンドウとは動作が異なる。
     標準モード、互換モードといった問題ではありません。プロパティは異なったかもしれません。scrollXXXかもです。もしかしたら別の何かが影響している可能性もありますが、想定外の動作となってしまうケースがあるように思えます。


    ⑤ホスト名がlocalhostの場合に、F12キーによる開発者ツールが起動しない。
     hostsファイルをいじることで、別ドメインで自マシンにアクセスすれば開発者ツールは起動するのですが、ブラウザがアクセスするURLがlocalhostの場合は、F12キーを押しても起動してくれません。これは、showModalDialogで出したウィンドウを調査しようとしたときに発生してしまいます。同じlocalhostであっても普通にブラウザを開いたり、window.openで開いたウィンドウでは開発者ツールは起動するため、showModalDialogでの問題という認識です。

    2010年8月28日 17:47