Perché IE9 passa alla modalità compatibilità sul mio sito Web?


197

Ho appena installato IE9 beta e su un sito specifico ho creato (HTML5) IE9 passa alla modalità compatibilità a meno che non glielo dica manualmente. Ho provato a rimuovere diverse parti del sito Web ma nessuna modifica. Inclusa la rimozione di tutti i CSS include. Su qualche altro sito Web di me va bene.

Inoltre, non impostarlo manualmente perché IE9 ricorda l'impostazione dell'utente e non è possibile ripristinarlo automaticamente (o almeno non ho trovato come, nemmeno tramite la navigazione privata e la cache di svuotamento)

Comunque. Il sito in cui passa alla modalità di compatibilità: http://alliancesatwar.com/guide/
Uno in cui viene visualizzato correttamente: http://geuze.name/basement/ (Non riesco a pubblicare più di 1 collegamento ipertestuale)

Entrambi usano lo stesso doctypee tutti. Quei siti hanno molto in comune (a parte l'aspetto) utilizzando lo stesso modello di base (codifica, meta tag, doctype e lo stesso javascript)

Sarebbe bello se qualcuno avesse una risposta per me! Un sito Web HTML5 che esegue il rendering in modalità IE7 è piuttosto ... zoppo.


5
Spiega "passa alla modalità compatibilità"? Se vedi l'aggiornamento della pagina e un fumetto che dice che IE ha aggiornato questa pagina in Visualizzazione compatibilità a causa di un problema, ciò significa che hai trovato un bug IE chiamato "asserzione dura" che è simile a un arresto anomalo nel motore di rendering . Siamo interessati a trovarli e risolverli; si prega di presentare un bug su connect.microsoft.com/ie . Grazie!
EricLaw,

Risposte:


263

Funziona in IE9 documentMode per me.

Senza X-UA-Compatibleun'intestazione / meta per impostare un DocumentMode esplicito, otterrai una modalità basata su:

  • se l'utente ha già fatto clic sul pulsante "Visualizzazione compatibilità" in quel dominio in precedenza;
  • forse anche se ciò è accaduto automaticamente a causa di alcuni altri contenuti sul sito che causavano il crash del renderer di IE8 / 9 e il fallback al vecchio renderer;
  • se l'utente ha scelto di mettere tutti i siti nella visualizzazione di compatibilità per impostazione predefinita;
  • se IE ritiene che il sito sia nella tua intranet e quindi per impostazione predefinita alla visualizzazione di compatibilità;
  • se il sito in questione si trova nell'elenco di siti Web di Microsoft che richiedono la visualizzazione della compatibilità.

Puoi modificare queste impostazioni da "Strumenti -> Impostazioni vista compatibilità" dal menu IE. Ovviamente quel menu è ora nascosto di nascosto, quindi non lo vedrai finché non premi Alt.

Come autore del sito, se sei sicuro che il tuo sito sia conforme agli standard (viene eseguito correttamente in altri browser e utilizza lo sniffing delle funzionalità per decidere quali soluzioni alternative del browser utilizzare), ti suggerisco di utilizzare:

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

o l'intestazione HTTP:

X-UA-Compatible: IE=Edge

per ottenere l'ultimo renderer qualunque sia la versione di IE in uso.


79
Nota importante: se IE 9 è configurato per mostrare sempre i siti Intranet in modalità compatibilità, né il meta tag né l'intestazione HTTP lo sovrascriveranno.
Jacob,

29
Come menziona Jacob, IE può automaticamente visualizzare tutti i siti locali / intranet in modalità compat. Premi alt -> Strumenti Compatibilità Visualizza le impostazioni e assicurati di non avere la casella selezionata.
Cory Mawhorter,

30
Il meta tag ha funzionato solo per me quando l'ho messo subito dopo <head> (vedi anche la risposta sotto). Quando l'ho inserito più in basso nell'elemento <head>, non ha funzionato (ho ancora la pagina strappata).
Boris van Schooten,

13
@Jacob: È un po 'fuorviante. Sì, sarai in modalità browser compatibile e non c'è via d'uscita. Ma puoi comunque usare l'intestazione HTTP per impostare la Modalità documento su cui mai la versione di IE funziona meglio per il tuo sito. IE = Edge dovrebbe sempre fornirti l'ultimo motore di rendering. Quindi, anche se tecnicamente sei in modalità compatibilità, puoi rendere le tue pagine renderizzate come in modalità normale. Correggimi se sbaglio, ma almeno il nostro sito Intranet funziona esattamente in questo modo (anche con l'impostazione "Visualizza siti intranet in vista compatibilità" selezionata).
mkataja,

7
@BorisvanSchooten: non so se questo sia il motivo, ma i <meta>tag devono trovarsi entro i primi 512 byte di un file HTML elaborato. Dico "elaborato" perché puoi avere tutti i tipi di PHP lassù, ma il codice renderizzato è ciò che è importante. Sono arrivato a dove ho inserito tutti i miei commenti <meta>sotto i <meta>tag, in modo da non infrangere il requisito.
doubleJ

33

metto

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

prima cosa dopo

<head>

(L'ho letto da qualche parte, non ricordo)

Non potevo credere che funzionasse !!


Devi chiudere la scheda e aprire una nuova scheda, ci hai provato?
Zeb,

1
Ha detto "non" non "non";)
Nathan JB

14
+1, questa è una nota molto preziosa . Se hai <script>dentro s <head>prima di questa metaaffermazione, (IE = bordo) verrà ignorato.
jakub.g,

22

Per forzare IE a eseguire il rendering in modalità standard IE9, è necessario utilizzare

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Alcune condizioni possono far sì che IE9 passi alle modalità di compatibilità. Per impostazione predefinita, ciò può verificarsi su siti Intranet.


Funziona nell'altro sito Web. Quindi non dovrebbe essere così. Inoltre, quel meta-tag è male poiché dovresti aggiornarlo manualmente ogni volta che c'è una nuova versione di IE.
René,

2
Mi dispiace, non posso risolvere il tuo problema. Tuttavia, ho modificato la mia risposta per utilizzare IE=edgeinvece, che invoca sempre l'utilizzo dell'ultimo motore disponibile.
Delan Azabani,

Il tuo presupposto non è corretto. Le demo specificano X-UA-Compatible per impedire a IE di mostrare il pulsante Visualizzazione compatibilità poiché se l'utente lo spinge, il contenuto del sito non funzionerebbe correttamente.
EricLaw,

@ReneGeuze, hai sbagliato. Edge fa sempre riferimento all'ultima versione di IE.
Neoswf,

@DelanAzabani il mio portale intranet passa alla modalità compatibilità anche se ho aggiunto il meta tag come mi hai suggerito. si prega di suggerire come potrebbe risolvere e rimanere sull'esempio della modalità standard - IE 8, IE 8 comapitibility quindi voglio solo IE 8.
dsi,

6

Ho pubblicato questo commento su un thread StackOverflow separato, ma ho pensato che valesse la pena ripeterlo qui:

Per la nostra app ASP.Net interna, l'aggiunta del tag "X-UA-Compatible" nella pagina Web, nel web.config o nel code-behind non ha fatto assolutamente alcuna differenza.

L' unica cosa che ha funzionato per noi è stata disattivare manualmente questa impostazione in IE8:

inserisci qui la descrizione dell'immagine

(Sospiro.)

Questo problema sembra verificarsi solo con IE8 e IE9 su siti Intranet. I siti Web esterni funzioneranno correttamente e utilizzeranno la versione corretta di IE8 / 9, ma per i siti Web interni, IE9 decide improvvisamente che è in realtà IE7 e non ha alcun supporto HTML 5.

No, non capisco nemmeno questa logica.

La mia riluttante soluzione è stata quella di verificare se il browser ha il supporto HTML 5 (creando un canvas e testando se è valido) e mostrando questo messaggio all'utente se non è valido:

inserisci qui la descrizione dell'immagine

Non è particolarmente facile da usare, ma convincere l'utente a disattivare questa fastidiosa impostazione sembra essere l'unico modo per far funzionare correttamente le app Web HTML 5 interne.

Oppure fai in modo che gli utenti utilizzino Chrome. ;-)


1

Il sito all'indirizzo http://www.HTML-5.com/index.html ha il metatag compatibile X-UA ma continua a essere visualizzato nella Visualizzazione compatibilità come indicato dall'icona "Pagina strappata" nella barra degli indirizzi. Come si ottiene l'opzione di menu per forzare IE 9 (versione finale 9.0.8112.16421) per il rendering di una pagina in modalità standard? Ho provato a fare clic con il tasto destro sull'icona della pagina strappata e con il tasto "Alt" per visualizzare le opzioni di menu aggiuntive menzionate da Rene Geuze, ma quelle non funzionavano.


4
Rimuovi il commento condizionale di IE attorno alla meta. Stai servendo la pagina come application/xhtml+xml, quindi vengono utilizzate le regole di analisi XML; XML non supporta i commenti condizionali. In ogni caso non ha alcun senso; il browser deve scegliere una modalità prima di poter decidere quali commenti condizionali interpretare.
mercoledì

1

A parte i siti Web più moderni, se stai usando istruzioni condizionali sul tuo tag html come da boilerplate, questo per qualche motivo causerà ie9 alla modalità predefinita di compatibilità. La correzione qui è spostare le tue istruzioni condizionali dal tag html e aggiungerle al tag body, in altre parole dalla sezione head. In questo modo puoi comunque usare quelle classi nel tuo foglio di stile per indirizzare i browser più vecchi.


0

Mi sta benissimo:

testo alternativo

Sei sicuro di non aver utilizzato le impostazioni a livello globale o qualcosa del genere? Questa è un'installazione pulita della versione beta su Windows 7. Gli strumenti di sviluppo riportano che la pagina è impostata sulla modalità standard IE9.


Ho avuto più di 1 segnalazione di questo errore. Anche se forse ha a che fare con la directory base ( alliancesatwar.com ) che rende anche tutte le directory secondarie in modalità compatibilità. Ma poi ho la domanda: cosa nella radice del sito web rende IE renderizzare il sito Web in modalità compatibilità? Quindi forse almeno questa guida è codificata correttamente. Lo spero allora.
René,

@Rene Strange, l'ho appena riprodotto, facendo clic sul link Guida dalla homepage. Ma questo è successo solo una volta, e dopo alcuni tentativi devo ancora riprodurlo, solo una volta
Yi Jiang

0

Di recente ho dovuto risolvere questo problema ed ecco cosa ho fatto:

Prima di tutto, questa soluzione riguarda l'ottimizzazione del server Apache.

Il secondo pensiero principale è che c'è un bug in IE9 che significa che il meta tag non funzionerà, invece di questa soluzione prova questo

  • trova / apri il tuo httpd.conf
  • decommentare / o aggiungere la seguente riga

    LoadModule headers_module modules/mod_headers.so
  • aggiungi le seguenti righe

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • salva / riavvia il tuo server Apache,

  • vai alla tua pagina con IE9, usa strumenti come WireShark o Fiddler o usa gli strumenti di sviluppo di IE per verificare che l'intestazione sia lì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.