Domanda

Sto cercando di creare una finestra di dialogo che verrà visualizzata solo se il browser selezionato è IE (qualsiasi versione), tuttavia viene visualizzato questo errore:

  

Messaggio: errore di analisi HTML: impossibile modificare l'elemento contenitore padre prima della chiusura dell'elemento figlio (KB927917)

Questo è tutto in " Riga / Char / Code " 0 quindi non so dove sia l'errore. Il codice che sto usando è questo:

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

Ho notato se rimuovo il " BrowserDetect.browser " e .version rimuove l'errore, ma ho bisogno di quelli per controllare = / ... qualsiasi idea sarà apprezzata =).

È stato utile?

Soluzione

Stai modificando il documento mentre viene caricato (quando il browser non ha " visto " tag di chiusura per questo elemento). Ciò causa una situazione molto delicata nel parser e in IE non è consentito.

Blog di IE ha una spiegazione di ciò.

La soluzione è quella di modificare un altro elemento che è stato precedentemente nel documento ed è stato caricato completamente (dove il browser ha già visto il tag di chiusura per esso).

A proposito: la stringa </ non è consentita nell'elemento <script>. Usa <\/ che è un equivalente sicuro nelle stringhe JS.

Altri suggerimenti

Ho avuto lo stesso problema. Il mio problema era che stavo chiamando una funzione Javascript prima che il contenuto div fosse chiuso.

Per risolvere il problema, chiamo la funzione Javascript nel gestore di eventi ready jQuery:

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

Lettura del doc collegato da porneL, ho trovato una soluzione semplice per questo problema: l'aggiunta di un parametro 'differisci' allo script, tutto funziona bene.

<script defer=true>

Come ha detto Sergey Kirienko: usa i commenti condizionali. Il codice seguente verrà eseguito solo da Internet Explorer. Microsoft ha buone informazioni su questa pagina

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

Se vuoi una versione specifica puoi provare anche quella:

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

Lo sniffing del browser è un kludge che dovrebbe essere evitato quando possibile. È meglio annusare la capacità che si desidera utilizzare. Supponi di voler eseguire un'espressione XPath usando document.evaluate (), ma non sai se è supportato. Invece di annusare i browser supportati, procedere come segue:

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

Il modo migliore per affrontare solo IE sono commenti condizionali . Non è nemmeno necessario utilizzare JavaScript. Vedi ad esempio http://www.positioniseverything.net/articles/ie7-dehacker.html .

Forse un po 'in ritardo, ma questo errore compare anche se stai usando SWFObject e hai 2 div con lo stesso ID.

Avevo div duplicati, [con id = " flashcontent " ;, grazie alla copia & amp; incolla].

Risolto rinominando i div con ID univoci.

javascript funziona in modo molto semplice con navigator.appName. (vedi http://de.selfhtml.org/javascript/objekte/navigator.htm) È possibile creare un if-query con questo. Molto semplice, provalo!

Una versione corrente di https://apis.google.com/js/plusone.js ha causato questo errore su IE8 in uno dei miei siti.

Soluzione più semplice: rimuovi google +.

Soluzione semplice: racchiudi il codice nel documento di jquery. già funzionante o simile:

$(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);
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top