Internet Explorer が突然クラッシュし始めた Web サイトがあります。
Web サイトが読み込まれ、javascript の実行が開始されますが、どこかで機械が爆発します。スクリプト エラーは発生しません。クラッシュするだけです。組み込みのデバッガーを使用して js のすべての行を手動でステップスルーしようとしましたが、もちろん問題は発生しません。
アプリケーションがクラッシュしたときにアプリケーションをデバッグすることを選択すると、次のメッセージが表示されます。
iexplore.exe の 0x6c5dedf5 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000090。
コール スタックの上位 5 項目は次のようになります
VGX.dll!6c5dedf5()
[以下のフレームは正しくないか、見つからない可能性があります。VGX.dll のシンボルがロードされていません]
VGX.dll!6c594d70()
VGX.dll!6c594f63()
VGX.dll!6c595350()
VGX.dll !6c58f5e3()
mshtml.dll!6f88dd17()
VGX.dll は vml レンダラーの一部のようで、実際に VML を使用しています。私はvmlで非常に多くの問題を抱えていたので驚いていません.属性は特定の順序で設定する必要があります.DOMに要素が接続されている場合は属性を設定できない場合があります.通常、デバッグ時に再現できますが、現在は再現できません:(
この問題は、no plugin-mode でも発生します。
これを解決するための試行錯誤よりも良いアプローチはありますか?
編集: 疑わしいすべての変更をDOMに出力するコンソールを追加すると、問題が時々発生するだけになりました。(コンソールも同じページに JavaScript で実装されています。ウィンドウがまだ表示されているため、クラッシュした後でも出力を見ることができます) どうやら、ある種の競合状態のようです。
私はそれをさらに追跡することができました.DOMからオブジェクトを追加した直後にオブジェクトを削除すると発生するようです. (ほとんどの場合、何らかの特別な属性を持つ vml 要素の場合にのみ、それ以上試しませんでした) そして、removeChild の前にデッド ループを追加することによって修正することはできません (とにかくかなり悪い解決策です)。 removeChild を呼び出す前に、addChild の後でブラウザを 1 回呼び出します。はぁ