これは単なる推測ですが、問題は DOMImplTrident.isOrHasChildImpl メソッドの 53 行目にあると思われます。
return (parent === child) || parent.contains(child);
さらに、IE10 でエラーが発生していると思いますか? あなたが IE10 に対して実行していると私が思う理由は、GWT が別の DOM 実装で IE10 を正式にサポートしていないためです。IE10 で DOMImplIE9 実装を使用することになり、その 'isOrHasChild' 実装に DOMImplTrident の上記のメソッドが使用されます。47行目かどうか疑問に思っています
if (parent.nodeType == 9) {
実際にはドキュメント ノードに対して 9 を返さないため、ドキュメント ノードの「else」ステートメントにドロップされ、「contains」メソッドにアクセスしようとすると爆発します。おそらく、IE10 は以前のバージョンの IE と同じようにこれらのノード メソッドを実装していないのでしょうか? わからない。
この理論をテストするのに便利な IE10 はありませんが、始めるには良い場所かもしれません。同様のノード呼び出しを行う独自の JSNI メソッドを作成して理論をテストし、「document.nodeType」が実際に 9 を返すかどうか、または「node.contains」がさまざまなタイプのノードで爆発するかどうかを確認できます。
それが問題であることが判明した場合。問題を修正/回避するために、いくつかのことを試すことができます。
エントリ ポイントで GWT.setUncaughtExceptionHandler() を接続してみて、エラーを完全に無視してください。
問題のコードを呼び出している「あなたの」メソッドの 1 つのコード ブロックの周りに try/catch を貼り付け、例外を無視します。
次のメタ タグを html ファイルに追加してみて、IE10 で IE9 としてレンダリングすると問題が解決するかどうかを確認してください。
<meta http-equiv="X-UA-Compatible" content="IE=9" />
DOMImplIE9 を拡張し、'isOrHasChild' メソッドを独自のカスタム メソッドでオーバーライドするカスタム DOMImpl を作成し、何が起こるかを制御します。例えば
package com.google.gwt.dom.client;
public class DOMImplIE9Custom extends DOMImplIE9 {
@Override
public boolean isOrHasChild(Node parent, Node child) {
// Do your own thing
}
}
次に、遅延バインディングを使用して、次のようにカスタム実装で DOMImplIE9 を切り替えます。
<replace-with class="com.google.gwt.dom.client.DOMImplIE9Custom">
<when-type-is class="com.google.gwt.dom.client.DOMImpl"/>
<when-property-is name="user.agent" value="ie9"/>
</replace-with>
私が基本から外れていて、IE10 を使用していない場合でも、上記のアイデアを試して問題を回避できます。それか、最終的な修正を行い、IE の使用を完全に停止して、何時間ものストレスを回避してください :) 少なくとも正しい軌道に乗るのに役立つことを願っています。