質問
選択したブラウザがIE(すべてのバージョン)の場合にのみ表示されるダイアログボックスを作成しようとしていますが、このエラーが表示されます:
メッセージ:HTML解析エラー:子要素が閉じる前に親コンテナ要素を変更できません(KB927917)
これはすべて<!> quot; Line / Char / Code <!> quot; 0なので、エラーの場所がわかりません。私が使用しているコードはこれです:
<script type="text/javascript">
<!--
if(BrowserDetect.browser.contains("Explorer"))
{
var Nachricht = 'Hemos detectado que está utilizando ' + BrowserDetect.browser + ' ' +
BrowserDetect.version + '. Puede que algunas funciones no estén habilitadas. <p></p> Si desea experimentar todo el potencial del portal, por favor intente desde otro navegador (browser). <p></p>Gracias
showDialog('¡Aviso Importante!',Nachricht,'warning',10);
}
</script>
<!> quot; BrowserDetect.browser <!> quot;を削除すると気づきました。 .versionを使用するとエラーは削除されますが、チェックする必要があるのは、= / ...任意のアイデアが評価されます=)。
解決
ロード中にドキュメントを変更しています(ブラウザが<!> quot; seen <!> quot;この要素のタグを閉じていない場合)。これにより、パーサーで非常にトリッキーな状況が発生し、IEでは許可されません。
IEブログに説明があります。
解決策は、ドキュメントの前にあり、完全にロードされている別の要素を変更することです(ブラウザでは既にその終了タグが表示されています)。
BTW:</
要素では文字列<script>
は許可されません。 JS文字列で安全な同等の<\/
を使用します。
他のヒント
これと同じ問題がありました。私の問題は、含むdiv
が閉じる前にJavascript関数を呼び出していたことです。
問題を解決するには、jQuery ready
イベントハンドラー内でJavascript関数を呼び出します。
$(document).ready(function(){
some_random_javascript_function();
});
doc porneLによってリンクされ、この問題の簡単な回避策が見つかりました。スクリプトに「defer」パラメータを追加すると、すべて正常に動作します。
<script defer=true>
セルゲイ・キリエンコのように、条件付きコメントを使用します。以下のコードは、Internet Explorerによってのみ実行されます。 Microsoftは、このページで適切な情報を提供しています。
<!--[if IE]>
<script type="text/javascript">
showDialog('¡Aviso Importante!','message','warning',10);
</script>
<![endif]-->
特定のバージョンが必要な場合は、それについてもテストできます:
<!--[if lte IE 7]>
<script type="text/javascript">
showDialog('¡Aviso Importante!','Your are using a too old version of Internet explorer. Please upgrade','warning',10);
</script>
<![endif]-->
ブラウザスニッフィングは、可能な場合は避ける必要のある厄介なものです。使用する機能を探るのが最善です。 document.evaluate()を使用してXPath式を実行したいが、サポートされているかどうかわからないとします。サポートされているブラウザをスニッフィングする代わりに、これを実行します。
if (document.evaluate) {
// go ahead and use it
} else {
// browser doesn't support it; do something else
}
IEのみに対処する最良の方法は、条件付きコメントです。 JavaScriptを使用する必要さえありません。たとえば、 http://www.positioniseverything.net/articles/ie7-dehacker.htmlを参照してください。 。
少し遅いかもしれませんが、SWFObjectを使用していて、同じIDの2つのdivがある場合、このエラーもポップアップします。
重複したdivがありました。[id = <!> quot; flashcontent <!> quot;、copy <!> amp; paste]のおかげです。
一意のIDを持つdivの名前を変更することで解決。
javascriptは、navigator.appNameを使用すると非常に簡単に機能します。 ( http://de.selfhtml.org/javascript/objekte/navigator.htmを参照してください) これでif-queryを作成できます。非常に簡単、試してみてください!
https://apis.google.com/js/plusone.js <の現在のバージョンは、私のサイトのIE8でこのバグを引き起こしました。
最も簡単なソリューション-google +を削除します。
簡単な解決策-jqueryのdocument.ready -functionなどでコードをラップします:
$(document).ready(function(){
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
});