2009-04-22 16 views
6

私のサイトにはOperation Aborted errorがあります。私が奇妙なことを見つけるのは、私の場合、エラーはたまにしか起こらないということです。サイトは3ヶ月間正常に動作していて、今日は毎回起きるが、起きるのではない。IEの操作の検出原因が異常終了しました

多くのサードパーティのコントロールでは、このページがかなり大きくなっています。私が望むのは、障害が発生している場所を特定できるツールです。私ができる最善のように見えるのは、操作が中止された後に発生する最初のjavascriptエラーです。しかし、これはあまり役に立ちません。このエラーはIEがHTMLの解析を停止して以来私が期待していたdomの要素が利用できないためです。

これを絞り込むためのアイデアやトリックはありますか?

編集

この問題を解決する追加の方法があります。しかし、私が探しているのは、問題の原因となっているスクリプトを特定する方法です。

最終編集は、IE8に切り替えた後、私は原因を特定することができたAjaxControlツールキットのモーダルポップアップダイアログでした。これを判断するための具体的な方法はありませんでしたが、デバッガはどこが失敗していて、どれが一貫しているかを見せてくれました。コントロールに初期化の移動を指示する方法がないため、無効にして、ドキュメントのロードイベントハンドラでクライアントサイドコントロールを作成するスクリプトを用意しています。

この問題はコントロールのフォルトではなく、ポップアップの内容が実際に第2の形式になっているため発生しています。率直に言って私はそれが今まで働いたことに驚いています

+0

IEのJavaScriptエラー報告は、悪名高い無用です。 Firefoxでエラーが発生しますか? – pkaeding

+0

ファイアーフォックスには何もありません。 – JoshBerke

答えて

3

DOMを操作しているJavaScriptはありますか?ケースはhttp://support.microsoft.com/kb/927917#more_informationで記述されていますか?

すべてのスクリプトブロックをページの一番下、つまり</body>タグの直前に移動し、bodyタグ自体のinnerHTMLプロパティを設定しないでください。

DOMが完全に構築される前に問題がjavascriptで実行されている場合は、ページが完全に読み込まれた後にのみ実行される関数に初期化呼び出しを移動してみてください。だから、代わりにこのような何かを:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    initializeWidgets(); 
</script> 

このような何かを試してみてください:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    $(document).ready(
    function() { initializeWidgets(); } 
); 
</script> 
+1

それは問題です、私は個人的にこれをやっていませんが、ComponentArtグリッド、ダイアログ、コールバック、Ajaxツールキットのダイアログなどなどがこれを行っているかどうかはわかりません。 – JoshBerke

+0

私が取得している最初のjavascriptエラーは、ポップアップのAjaxコントロール・ツールキットの登録です。 $ get(element)がnullなのでここではdomを改造していないので失敗してしまいます... – JoshBerke

+0

これで問題を回避する方法の例を追加しました。それはまったく役に立ちますか? – pkaeding

1

これは完全にオペアンプを回避(以下JSコメントでリンクに基づいて)私が使用した気の利いたトリックです他のブラウザのパフォーマンスに影響を与えることなくAbエラー。最初に関数内でエラー(たとえば、サードパーティのウィジェットの読み込み/インスタンス化)を行う可能性のあるスクリプトをラップし、delayExecutionForIE関数内でその関数を呼び出します。myFunctionへの呼び出しがそこにあることに注意してくださいIEでは1回、すばらしいブラウザでは1回です。

サードパーティのスクリプトは、それが何をしているのか、どのように読み込まれるのかによって、この動作を妨げるかもしれませんが、試してみる価値があります。 IE8は、もはや「クラッシュ」の代わりにエラーをログに記録する、完全にレンダリングにそのエラーが発生しますが、

function delayExecutionForIE() { 
     if (typeof document.all == "object" && 
      (document.readyState != "loaded" 
      && document.readyState != "complete") 
     ) { 
      try { 
        //If IE is used, use the trick by Diego Perini 
        //http://javascript.nwbox.com/IEContentLoaded/ 
        document.documentElement.doScroll("left"); 
        myFunction(); 
      } catch(error) { 
        setTimeout(delayExecutionForIE, 200); 
      } 
     } else { 
      myFunction(); 
     } 
} 

function myFunction() { 
    //this is your function that manipulates the DOM 
} 

delayExecutionForIE(); 
0

、それは残念ながら新しい開発者ツールで見つかったJavaScriptデバッガでキャッチしないされず、エラーメッセージが」doesnの本当にどこでエラーが発生したか教えてください。

非常に面倒ですが、問題を特定できる回避策は、IE8のデバッガを使用して、実行されるJavaScriptコードの最初の部分にブレークポイントを設定し、エラーアイコンがブラウザの左下隅に表示されます。そのようなことが起こると、エラーを引き起こすコードの行は、stepをクリックする直前にハイライト表示された行であることがわかります。しかし、私は他のことを考えることはできません(もちろん、サードパーティのコードのベンダーに連絡して、関連する可能性のあるアップデートがあるかどうかはわかりません)。

もちろん、IE8にアップグレードするようにユーザーに指示することもできます。 ;)

+0

私はIE8にアップグレードしましたが、エラーが発生してもエラーは出なくなりました。私は良いアイデアが今問題を引き起こしている、ちょうどそれを試して証明する必要があります。追加情報ありがとう – JoshBerke

+0

そのエラーはまだIE8で発生しますが、それほど頻繁ではありません。上記のRobert.Kの記事を参照してください。 – Spongeboy

0

Microsoft はIE8へのアップグレードをお勧めします!

1

ほとんどの場合、JSではDOMの問題です。

$(element).append(someHtml); 

ので、IEであなたはそれが以下のコードはIE7が

<div id="o"> 

... 
$(o).appendChild(); 
... 

</div> 
を「操作は中止され、」メッセージをもたらすことになります例えば、タグ

を閉じていている場合にのみオブジェクトにコンテンツを追加することができます

そして正しい方法

<div id="o"> 

... 

</div> 

$(o).appendChild(); 
関連する問題