7

私たちのウェブサイトはAJAX呼び出しを使用XMLHTTPRequestし、それを達成するために使用します。クライアントが1日を通して単一のIEインスタンスを使用し、そのIEでページを頻繁にナビゲートして参照すると、メモリ不足の例外が発生し、IEを強制的に閉じることになります。

Enable native XMLHTTP supportIEの[Advnaced]タブでオプションを有効にすると、問題が修正されます。ActiveXObjectよりもネイティブXMLHTTPオブジェクトを優先するため、ActiveXObjectの使用が原因で例外が発生する可能性があります。しかし、根本的な原因が何であるか、または問題を解決するための他のより良い方法があるかどうかはまだわかりません。IE8を使用しています。他のブラウザ(Firefoxとchrome)でこのような問題が発生したことはありません。ありがとう

4

3 に答える 3

6

ネイティブXMLHTTPサポートを有効にすると、ブラウザはMSXML.HttpRequestを提供せず、代わりに標準に準拠したwindow.XMLHttpRequestを提供します。ただし、両方のバージョンをリークすることなく使用できたので、コードの実装上の問題であると思います。推測しているだけですが、(eventlistenerを介して)DOMNodeにMSXML.HttpRequestインスタンスを固定すると、このような状況が発生する可能性があります。

于 2012-04-27T09:22:07.823 に答える
2

IEの[ネイティブXMLHTTPサポートを有効にする]オプションを使用すると、当然のことながら、IEはXMLHTTPRequestのネイティブサポートを提供します。これを有効にしないと、IEのMSXMLライブラリへのレガシーActiveXバインディングしかありません。ネイティブサポートがない場合(設定がオフになっている場合、またはレガシーインターフェイスしかない古いIE)または手動でMSXMLにフォールバックする場合のクロスブラウザ処理MSXMLバインディングはJavaScriptのエイリアンインターフェイスであるため、JSの外部からオブジェクトが導入される場所はたくさんありますネイティブオブジェクトとの相互参照を形成できますが、JSまたはActiveXガベージコレクターが通信せず、そのような循環参照を見つけることができないため、それらを再利用することはできません。

私の意見では、最善の解決策は、IE7ユーザーに常にこのオプションをオンにして(実際には欠点はありません)、古いブラウザーを忘れるように勧めることです。これがどういうわけかオプションではない場合は、フォールバックコードで作成したすべてのMSXMLオブジェクトを再帰的にクリアしてみてください。

于 2012-04-27T09:30:43.967 に答える
1

基本的に、HTML DOM、JavaScript 実行エンジン、および XMLHTTPRequest オブジェクト間の循環参照により、XMLHTTPRequest オブジェクトがリークしています。

リクエストが完了したら、イベントをアンフックし、XMLHttp オブジェクトを逆参照する必要があります。(それらを逆参照するには、onClick ハンドラーなどの小さなスクリプトを含め、JavaScript オブジェクトまたは変数がそれらを参照していないことを確認してください。

ネイティブ XMLHTTPRequest を有効にするということは、外部コンポーネントがループから取り出されることを意味するため、DOM はリクエストの有効期間自体を管理できます。

@PeterAronZentaiの回答も参照してください。

于 2012-04-27T09:27:16.313 に答える