2011-09-06 17 views
8

Internet Explorer 6およびWindows XPで実行されているJavaScript集約的なシンクライアントアプリケーションで表示される断続的なスクリプトエラーを理解しようとしています。 targetWindowwindowオブジェクトですどのような状況でdocument.open()はnullを返しますか?

var doc = targetWindow.document.open("text/html","_replace"); 

:問題の根本的な原因は、次の関数呼び出しはnull値を(ただし、それはエラーなしで成功しない)を返すということです。

targetWindowtargetWindow.documentどちらnullですので、私はこの呼び出しはnullを返す理由を理解するのに苦労しています。 the documentationの私の解釈は、このメソッドはnullを返すべきではないということです。

このコードは変更されておらず、何年も完璧に動作しています。なぜこれが起こっているのか分かりませんが、私はこれをどのように扱うか、

この関数呼び出しでnullが返される原因は何ですか?

+2

IE6のサポートを停止することはできますか?結局のところ、Microsoftはもはやそれをサポートしていません。さらに、IE8はWindows XPでもうまく動作します。企業環境であれば、IE6の不安定性、欠陥、限界から最終的にアップグレードするよう説得する必要があります。 –

答えて

1

文書によると、 "_replace"ではなく "replace"を渡す必要があります。代わりにこれを試してみてください:

var doc = targetWindow.document.open("text/html", "replace"); 

あなたのコードは何年も働いていると言うので、何かが変更されていると上記の提案は、問題ではないかもしれないという可能性があります。しかし、それはまだ試してみる価値があります。

最近、あなたのアプリケーションで使用しているjsファイル/ライブラリを変更しましたか?また、ページ内のブラウザプラグインを使用していますか?これらのいずれかの新しいバージョンが何らかの形で "document.open"への呼び出しに影響を与える可能性があります。

0

document.open()にはW3C標準によるパラメータはありません。 http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-72161170

W3Cでは、すべての最新のブラウザで動作すると確信していますが、マイクロソフトは拡張機能を追加することでよく知られているため、MicrosoftのものではなくW3Cのドキュメントを使用することをお勧めします自社の製品。それはEEE(抱きしめ、拡張、消滅)と呼ばれています。

引数なしでdocument.open()を使用するだけです。ユーザーの履歴を操作する方法がありますが、それは悪いプログラミングの練習と呼ばれています。履歴はユーザのプライベートデータであり、Webアプリケーションはそれを操作しようとすべきではありません。

+3

通常、私はこれを心からサポートしていますが、OPは(私がそれを読んで)* only *がIE6で動作するアプリケーションを維持しています。この場合、この答えはほぼ無駄です。 EEEについてのちょっとした暴言はそれを悪化させます。 –

関連する問題