Question

J'essaie de créer une boîte de dialogue qui n'apparaîtra que si le navigateur sélectionné est IE (n'importe quelle version), mais j'obtiens cette erreur :

Message:Erreur d'analyse HTML :Impossible de modifier l'élément conteneur parent avant la fermeture de l'élément enfant (KB927917)

Tout est dans "Line/Char/Code" 0 donc je ne sais pas où est l'erreur.Le code que j'utilise est le suivant :

 <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>

J'ai remarqué que si je supprime "BrowserDetect.browser" et .version, cela supprime l'erreur, mais j'en ai besoin pour vérifier =/... toutes les idées seront appréciées =).

Était-ce utile?

La solution

Vous modifiez le document pendant son chargement (lorsque le navigateur n'a pas & "vu &"; balise de fermeture pour cet élément). Cela provoque une situation très délicate dans l'analyseur et dans IE, cela n'est pas autorisé.

blog IE a l'explication à ce sujet.

La solution consiste à modifier un autre élément déjà présent dans le document et qui a été chargé (le navigateur a déjà vu la balise de fermeture correspondante).


BTW: la chaîne </ n'est pas autorisée dans <script> élément. Utilisez <\/ qui est un équivalent sûr dans les chaînes JS.

Autres conseils

J'ai eu le même problème. Mon problème était que j'appelais une fonction Javascript avant la fermeture du conteneur div.

Pour résoudre le problème, j'appelle la fonction Javascript dans le gestionnaire d'événements jQuery ready:

$(document).ready(function(){
    some_random_javascript_function();
});

Lire le doc lié par porneL, j'ai trouvé une solution simple à ce problème :En ajoutant un paramètre « defer » au script, tout fonctionne bien.

<script defer=true>

Comme Sergey Kirienko a dit: utilisez des commentaires conditionnels. Le code ci-dessous ne sera exécuté que par Internet Explorer. Microsoft dispose de bonnes informations sur la page .

<!--[if IE]>
<script type="text/javascript"> 
 showDialog('¡Aviso Importante!','message','warning',10);
 </script>
<![endif]-->

Si vous souhaitez une version spécifique, vous pouvez également le tester:

<!--[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]-->

La détection par navigateur est un problème à éviter autant que possible. Il est préférable de rechercher la fonctionnalité que vous souhaitez utiliser. Supposons que vous souhaitiez exécuter une expression XPath à l'aide de document.evaluate (), mais que vous ne sachiez pas si elle est prise en charge. Au lieu de détecter les navigateurs pris en charge, procédez comme suit:

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}

Les commentaires conditionnels constituent le meilleur moyen de s’adresser à IE. Vous n'avez même pas besoin d'utiliser JavaScript. Voir, par exemple, http://www.positioniseverything.net/articles/ie7-dehacker.html .

Peut-être un peu tard, mais cette erreur s’affiche également si vous utilisez SWFObject et que vous avez 2 divs avec le même identifiant.

J'ai eu des divs en double, [avec id = & "; flashcontent &"; merci de copier & et coller].

Résolu en renommant les div avec des identifiants uniques.

javascript fonctionne très facilement avec navigator.appName. (voir http://de.selfhtml.org/javascript/objekte/navigator.htm) Vous pouvez créer une requête if avec cela. Très facile, essayez-le!

Une version actuelle de https://apis.google.com/js/plusone.js a provoqué ce bogue sur IE8 dans l’un de mes sites.

La solution la plus simple - supprimez Google +.

Solution simple - envelopper le code dans la fonction document.ready de jquery ou similaire:

$(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);
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top