Frage

Ich versuche, ein Dialogfeld zu erstellen, die nur aktiviert, wenn der Browser IE angezeigt ist (jede Version) jedoch bekomme ich diesen Fehler:

  

Nachricht: HTML-Parsing-Fehler: Kann nicht den übergeordneten Container Element vor dem Kind-Element ändern ist geschlossen (KB927917)

Das ist alles in „Zeile / Zeichen / Code“ 0, also weiß ich nicht, wo der Fehler ist. Der Code ich verwende, ist dies:

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

Ich habe bemerkt, wenn ich die „BrowserDetect.browser“ entfernen und .version es die Fehler beseitigt, aber ich brauche diejenigen zu überprüfen = / ... werden alle Ideen geschätzt =).

War es hilfreich?

Lösung

Sie modifizieren Dokument, während es geladen wird (wenn Browser zu schließen Tag für dieses Element nicht „gesehen“ hat). Dies führt zu sehr schwierige Situation in den Parser und in IE ist es nicht erlaubt.

IE-Blog hat Erklärung dafür.

Die Lösung ist ein weiteres Element zu ändern, die in dem Dokument früher ist und vollständig geladen wurde (wo Browser bereits Tag für sich sah Schließen).


BTW: Der String </ ist nicht in <script> Elemente erlaubt. Verwenden Sie <\/, die ein sicheres Äquivalent in JS Strings ist.

Andere Tipps

Ich hatte das gleiche Problem. Mein Problem war, dass ich eine Javascript-Funktion rufe vor dem umschließende div geschlossen wurde.

Um das Problem zu beheben, rufe ich die Javascript-Funktion innerhalb des jQuery ready Ereignishandler:

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

Lesen Sie die doc verknüpft durch porneL, fand ich eine einfache Abhilfe für dieses Problem: a. Parameter 'defer', um das Skript Hinzufügen, alles funktioniert gut

<script defer=true>

Wie Sergey Kirijenko sagte: Verwenden Sie bedingte Kommentare. Der folgende Code wird nur von Internet Explorer ausgeführt werden. Microsoft hat gute Informationen über diese Seite.

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

Wenn Sie eine bestimmte Version, die Sie für diese testen:

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

Browser-Sniffing ist eine Flickschusterei, die, wenn möglich, vermieden werden sollte. Es ist am besten schnüffeln für die Fähigkeit Sie verwenden möchten. mit document.evaluate () Angenommen, Sie möchten einen XPath-Ausdruck ausführen, aber Sie wissen nicht, ob es unterstützt wird. Statt für unterstützten Browser von Schnupfen, dies zu tun:

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

Der beste Weg zur Adresse nur IE ist bedingte Kommentare . Sie brauchen nicht einmal JavaScript zu verwenden. Siehe zum Beispiel http://www.positioniseverything.net/articles/ie7-dehacker.html .

Vielleicht ein wenig spät, aber diese Fehlermeldung erscheint auch, wenn Sie SWFObject verwenden und 2 divs mit derselben ID.

Ich hatte doppelte divs, [mit id = "flash", dank Copy & Paste].

Gelöst durch die divs mit eindeutigen IDs umbenennen.

javascript sehr einfach mit navigator.appName funktioniert. (Siehe http://de.selfhtml.org/javascript/objekte/navigator.htm) Sie können eine if-Abfrage mit diesem erstellen. Sehr einfach, nur versuchen Sie es!

Eine aktuelle Version des https://apis.google.com/js/plusone.js verursacht auf IE8 diesen Fehler in einer meiner Seiten.

Die einfachste Lösung - entfernen google +.

Einfache Lösung - wickeln Sie den Code in jQuerys document.ready -function oder ähnlich:

$(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);
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top