35

選択したブラウザーが IE (任意のバージョン) の場合にのみ表示されるダイアログ ボックスを作成しようとしていますが、次のエラーが発生します。

メッセージ: HTML 解析エラー: 子要素が閉じられる前に親コンテナー要素を変更できません (KB927917)

それはすべて「Line/Char/Code」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>

「BrowserDetect.browser」と .version を削除するとエラーが削除されることに気付きましたが、チェックするためにそれらが必要です =/...どんなアイデアでも大歓迎です =)。

4

9 に答える 9

27

ドキュメントの読み込み中にドキュメントを変更しています(ブラウザがこの要素の終了タグを「認識」していない場合)。これにより、パーサーで非常にトリッキーな状況が発生し、IEでは許可されません。

IEブログにこれについての説明があります。

解決策は、ドキュメントの前半にあり、完全にロードされている別の要素を変更することです(ブラウザーはすでにその要素の終了タグを確認しています)。


ところで:文字列</<script>要素で許可されていません。<\/JS文字列で安全に同等のものを使用します。

于 2008-11-20T00:19:17.457 に答える
9

私はこれと同じ問題を抱えていました。私の問題は、包含divが閉じられる前に Javascript 関数を呼び出していたことです。

この問題を解決するために、jQueryreadyイベント ハンドラー内で Javascript 関数を呼び出します。

$(document).ready(function(){
    some_random_javascript_function();
});
于 2009-06-17T20:12:56.877 に答える
7

porneL によってリンクされたドキュメントを読んで、この問題の簡単な回避策を見つけました。スクリプトにパラメータ 'defer' を追加すると、すべて正常に動作します。

<script defer=true>
于 2010-09-30T11:29:23.257 に答える
3

ブラウザのスニッフィングは、可能な限り避けるべきである。使用したい機能をスニッフィングすることをお勧めします。document.evaluate() を使用して XPath 式を実行したいが、サポートされているかどうかわからないとします。サポートされているブラウザをスニッフィングする代わりに、次のようにします。

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}
于 2008-11-19T20:10:52.903 に答える
3

Sergey Kirienko が言ったように、条件付きコメントを使用します。以下のコードは 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]-->
于 2008-11-19T11:58:31.320 に答える
2

IE だけに対処する最善の方法は、条件付きコメントです。JavaScript を使用する必要さえありません。たとえば、http://www.positioniseeverything.net/articles/ie7-dehacker.htmlを参照してください。

于 2008-11-19T10:41:05.517 に答える
0

少し遅いかもしれませんが、SWFObject を使用していて、同じ ID を持つ 2 つの div がある場合にも、このエラーがポップアップします。

[id="flashcontent" を使用、コピー & ペーストのおかげで] 重複した div がありました。

一意の ID を持つ div の名前を変更することで解決しました。

于 2010-05-25T11:55:24.530 に答える
0

javascript は navigator.appName で非常に簡単に動作します。( http://de.selfhtml.org/javascript/objekte/navigator.htmを参照) これで if-query を作成できます。とても簡単です。ぜひお試しください。

于 2012-11-26T13:20:21.473 に答える