IE10 esegue il rendering in modalità IE7. Come forzare la modalità Standard?


Risposte:


244

Internet Explorer parte dal presupposto che la maggior parte delle pagine web siano state scritte per targetizzare versioni precedenti di IE e guarda il doctype, i meta tag e l'HTML per determinare la migliore modalità di compatibilità (a volte in modo errato). Anche con un doctype HTML5, IE metterà comunque il tuo sito web in modalità di compatibilità se si tratta di un sito intranet.

Per assicurarti che il tuo sito web utilizzi sempre la modalità standard più recente, puoi assicurarti che Display intranet sites in Compatiblysia disattivata. Tuttavia è necessario farlo su ogni macchina locale al server web (le istruzioni sono di seguito).

In alternativa, e meglio ancora, puoi utilizzare l' X-UA-Compatibleintestazione per disattivarlo dal server. È importante notare che l' utilizzo del meta tag non funzionerà!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

In tutto MSDN si dice che l'utilizzo di un'intestazione host o di un metatag dovrebbe sostituire anche i siti intranet. L'articolo Comprendere le modalità di compatibilità in Internet Explorer 8 dice quanto segue.

Un gran numero di siti Web aziendali interni è ottimizzato per Internet Explorer 7, pertanto questa eccezione predefinita preserva tale compatibilità. ... Anche in questo caso, se un metatag o un'intestazione http viene utilizzato per impostare una modalità di compatibilità per il documento, sovrascriverà queste impostazioni.

Tuttavia, in pratica questo non funzionerà, l'uso di un'intestazione host è l'unica opzione che funziona. La sezione commenti dell'articolo mostra anche numerosi esempi di questo problema esatto.

L'uso di un metatag presenta anche molti altri problemi, come ignorare il tag se non è direttamente sotto il <head>tag o se ci sono troppi dati prima di esso (4k). Può anche attivare il riesame del documento in alcune versioni di IE, il che rallenterà il rendering. Puoi leggere ulteriori informazioni su questi problemi nell'articolo MSDN Best practice: Metti in ordine il tuo HEAD .

Aggiunta dell'intestazione X-UA-Compatible

Se stai usando .NET e IIS puoi aggiungerlo a web.config, puoi anche farlo a livello di programmazione:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Se non utilizzi IIS, è facile farlo in qualsiasi lingua. Ad esempio, ecco come farlo in PHP:

header('X-UA-Compatible: IE=edge');

Finché l' X-UA-Compatibleintestazione è presente con il doctype HTML5, un sito verrà sempre eseguito nella modalità degli standard più recenti.

Disattivazione della Visualizzazione Compatibilità
Potrebbe essere comunque utile disattivare la Visualizzazione Compatibilità. Per farlo, deseleziona Display all intranet sites in compatibility viewnelle Impostazioni Visualizzazione Compatibilità.

Impostazioni visualizzazione compatibilità

Puoi visualizzarlo premendo Altper visualizzare il menu.

inserisci qui la descrizione dell'immagine

Modifica Questa risposta riguarda anche IE9.


Perdonate la mia ignoranza, ma come arrivare a questa scheda Impostazioni? Ho controllato le impostazioni di Internet Explorer, ho fatto clic con il pulsante destro del mouse sulla visualizzazione della compatibilità nella barra degli indirizzi - niente.
firedev

2
@ Nick usa altper far apparire la barra degli strumenti, è sotto strumenti -> impostazioni di visualizzazione compat
Daniel Little

Oh grazie, sembra che l'abbia risolto. Viene da chiedersi perché lo abbiano fatto.
firedev

25
+1000;). COSÌ dovrebbe costringere ogni OP a vedere questa risposta, quando hanno un tag [IE] e una parola "compatibile" nella loro domanda, anche prima che pubblichino effettivamente quella domanda.
Teemu

2
Ho provato ad aggiungere la sezione delle intestazioni personalizzate al web.config del progetto. Sembra che l'impostazione non sovrascriva l'impostazione di Internet Explorer per l'utilizzo della visualizzazione compatibilità per i siti intranet.
DomenicDatti

25

Questo funziona per me ..

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

11
NB come dice Lavinski sopra, "il meta tag non fa nulla per i siti intranet".
Nathan

2
Per quello che vale, per un sito web ospitato (sito non intranet) che ha il X-UA-Compatiblemeta tag, ma non attiva ancora la modalità documento standard IE10 come pagina predefinita, ho scoperto che se il meta tag si trova sotto i tag script o è solo troppo lontano dalla cima <head>dell'albero DOM, IE10 piange e imposta la modalità documento sugli standard IE8. Quindi, tieni il tuo IE=edgemeta tag vicino al <title>tag. Non è sempre una soluzione semplice per i siti Wordpress quando non è hardcoded nel file del modello di intestazione. Non sono sicuro che a IE11 importi dove sia il meta tag, ma spero che questo si riveli utile a qualcuno.
purefusion

1
Per la copia nascosta e i pastelli come me, manca il tag di chiusura. . <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
John Newman

Devi solo chiudere il meta tag se stai usando il doctype XHTML
Andy Brudtkuhl

2
Anche questo tag deve essere il primo tag all'interno di <head>
Chris Gunawardena

10

Prova ad aggiungere il seguente tag alla testa

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />

5
Dovrebbe essere IE=Edgeinvece
Daniel Little

1
Ma c'è il rischio che le versioni future di IE
facciano

7
No, non è un rischio se segui le specifiche, non vedi persone che lo fanno per Chrome.
Daniel Little,

1
Questo tag deve essere il primo tag all'interno di <head>
Chris Gunawardena

1
La modifica su questa risposta dimostra perché questa non è una buona idea. La risposta accettata è la soluzione migliore.
David Granado

2

Il meta tag non fa nulla per i siti intranet e il mio problema era il rendering di IE10 in modalità di compatibilità IE10. Ciò che ha affrontato il problema per me è stato prendere ulteriormente la risposta di @ Jeow e utilizzare quel valore in un'intestazione http aggiungendo quanto segue web.configin IIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Ai fini di IE, i siti intranet includono siti rivolti al pubblico che non vengono instradati esternamente, ad esempio un dipendente Stackoverflow che lavora dall'ufficio probabilmente vedrebbe stackoverflow.com in modalità compatibilità.


1

Ha funzionato perfettamente per me quando ho fatto quanto segue:

Su http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

</html>Ho usato l'esempio esatto che forniscono nella prima casella (aggiunto il mancante in basso), l'ho aperto in IE10 e gli standard sono stati forzati, penso che potresti aver bisogno del contenuto effettivo nell'html per forzare gli standard non sicuri però.

Il mio suggerimento sarebbe quello di sostituire il codice vuoto con il contenuto effettivo (qualcosa di semplice) e vedere cosa fa.

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.