Forza la modalità di compatibilità di IE con i tag


375

Sto lavorando per un client che impone la modalità di compatibilità su tutti i siti Intranet. Mi chiedevo se ci fosse un tag che posso inserire nel mio HTML che spegne la modalità di compatibilità.


Penso che la risposta che stai cercando sia qui: stackoverflow.com/questions/1014666/…
Gabriel

45
In realtà stavo cercando l'esatto contrario, che imposta il loro standard sulla modalità di compatibilità, che è semplicemente folle.
Al Katawazi,

12
Cattivo javascript su un'app legacy che si arresta in modo anomalo su qualsiasi cosa diversa da IE7, ecco chi imposta i loro standard di compatibilità. Un giorno, cercheremo di rimpiazzarlo ...
pete il gerarca pagano l'

1
@ petethepagan-gerbil sei riuscito a sostituirlo? : P
icedwater

1
@icedwater Ho lasciato l'azienda oltre 6 anni fa :) Abbiamo apportato piccoli miglioramenti per rimuovere i problemi ogni volta che abbiamo avuto un cambiamento nella stessa area, ma il debito tecnologico non è mai stato considerato prioritario. Non so se alla fine sia stato corretto.
pete il gerarca pagano l'

Risposte:


535

C'è la modalità "edge" .

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

Dalla pagina MSDN collegata:

La modalità Edge indica a Windows Internet Explorer di visualizzare il contenuto nella modalità più alta disponibile, il che in realtà interrompe il paradigma del "blocco". Con Internet Explorer 8, questo equivale alla modalità IE8. Se una (ipotetica) versione futura di Internet Explorer supportasse una modalità di compatibilità superiore, le pagine impostate sulla modalità Edge appariranno nella modalità più alta supportata da quella versione; tuttavia, quelle stesse pagine appariranno comunque in modalità IE8 se visualizzate con Internet Explorer 8.

Tuttavia, la modalità "edge" non è incoraggiata nell'uso in produzione:

Si consiglia agli sviluppatori Web di limitare l'uso della modalità Edge per testare le pagine e altri usi non produttivi a causa dei possibili risultati imprevisti del rendering del contenuto della pagina nelle versioni future di Windows Internet Explorer.

Onestamente non capisco del tutto il perché. Ma secondo questo, il modo migliore per andare al momento è usare IE=8.


7
A partire dal 6/8/2012 Microsoft sembra utilizzare IE=10sui propri siti. Se hai testato il tuo sito in IE10 (versione di anteprima), è sicuro utilizzarlo; altrimenti, potresti voler attenerci IE=9per ora.
Calvinf,

75
Ho scoperto che questo NON funziona se l'utente (o l'amministratore di sistema) ha attivato la modalità di compatibilità come impostazione predefinita andando su Tools->Compatibility View Settingse selezionando Visualizza tutti i siti Web nella Visualizzazione compatibilità. Per risolvere il problema, devo restituire l'intestazione nella risposta HTTP:X-UA-Compatible: IE=edge
speedplane

10
Da +1 a speedplane - La modalità di compatibilità IE10 è ATTIVATA per impostazione predefinita per i siti Intranet - UGH ... grazie per la ricerca!
Viperguynaz,

132
Un consiglio per coloro che trovano questa risposta, ma non sono in grado di farlo funzionare per loro. Il meta tag di compatibilità DEVE essere il primo meta tag e non possono esserci istruzioni condizionali NO IE prima del tag. Altro: tesmond.blogspot.com/2011/10/…
Chris Sobolewski,

2
Grazie Chris! Ho avuto difficoltà con questo per 30 minuti quando finalmente ho letto il tuo commento. Prima non l'ho avuto.
Hawkee,

91

Dopo molte ore che hanno risolto questo problema ... Ecco alcuni rapidi suggerimenti che ci hanno aiutato dalla X-UA-Compatibledocumentazione: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

utilizzando <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • Le modalità Standard User Agent (quelle non emulate) ignorano le <!DOCTYPE>direttive nella tua pagina e vengono renderizzate in base agli standard supportati da quella versione di IE (ad esempio, IE=8obbediranno meglio alla spaziatura del bordo della tabella e ad alcuni pseudo-selettori rispetto a IE=7).

  • Considerando che, le modalità di emulazione dicono a IE di seguire qualsiasi <!DOCTYPE>direttiva nella tua pagina, renderizzando la modalità standard in base alla versione scelta e eccedendo la modalità in baseIE=5

  • I valori possibili per l' contentattributo sono:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"


67

Se stai lavorando con una pagina nella Intranet Zone, potresti scoprire che IE9, indipendentemente da ciò che fai, sta andando in modalità IE7 Compat.

Ciò è dovuto all'impostazione all'interno delle impostazioni di compatibilità IE che indica che tutti i siti Intranet devono essere eseguiti in modalità compatibilità. Puoi deselezionarlo tramite un criterio di gruppo (o semplicemente deselezionarlo in IE) oppure puoi impostare quanto segue:

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

Funziona (come dettagliato in altre risposte), ma inizialmente potrebbe non apparire così: deve venire prima che vengano dichiarati i fogli di stile . In caso contrario, viene ignorato.


3
grazie per l'avvertimento sul foglio di stile, questo stava causando problemi e ora so il motivo!
eMRe,

Sì, inizialmente aggredito dal posizionamento. Grazie per averlo aggiunto.
John Moylan,

Grazie è stato molto utile. Hanno un oggetto Criteri di gruppo che imposta il livello IE effettivo su 7 anche se IE 11 è installato. Questo mi ha salvato dal dover mettere alcuni spessori nel sito per far funzionare js.
Charles Owen,

28

Credo che questo farà il trucco:

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

28

Come suggerito in questa risposta a una domanda correlata, la modalità "edge" può essere impostata nel file Web.Config. Questo lo farà applicare a tutto l'HTML restituito dall'applicazione senza la necessità di inserirlo in singole pagine:

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

Questo stesso passaggio può essere eseguito anche modificando le "Intestazioni di risposta HTTP" utilizzando Gestione IIS per il server IIS, l'intero sito Web o applicazioni specifiche.


19

La soluzione con meta tag non funzionava per noi, ma impostandola nell'intestazione della risposta ha fatto:

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

3
+1 per "chrome = 1"; Non l'ho mai saputo. Per quello che vale, cambiarlo in IE = 10 risolto una serie di problemi di rendering sul mio sito su cui IE = edge non ha avuto alcun effetto.

Spiegazione della chrome=1proprietà, stackoverflow.com/a/22059516/368691 . Ricorda che Chrome Frame è stato ritirato. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus

1
vedere i commenti su altre risposte ... Ho scoperto che NON funziona se l'utente (o l'amministratore di sistema) ha attivato la modalità di compatibilità come impostazione predefinita andando su Strumenti-> Impostazioni vista compatibilità e selezionando Visualizza tutti i siti Web nella Vista compatibilità . speedplane 19 aprile 13 alle 11:29 7 Il meta tag di compatibilità DEVE essere il primo meta tag e non possono esserci istruzioni condizionali IE prima del tag. Altro: tesmond.blogspot.com/2011/10/… - Chris Sobolewski 19 agosto 13 alle 20:23
felickz

Ho provato a inserirlo nella prima riga della pagina di layout. Non funziona, Stu ha menzionato la modifica delle intestazioni di risposta HTTP IIS. Provai. Ho riavviato il pool di app. Ispeziono di più. Questa è la pagina che nidifica sotto un'altra pagina. L'altra pagina ha un'altra meta. Questo è il sito Web di produzione. Così tante persone accedono a questa pagina. mettere questo tag in cima è una missione impossibile. Qualsiasi altra soluzione o io sono avvitato
user12345

10

Qualche nota in più su questo argomento in base alle mie esperienze recenti. L'università con cui lavoro per i portatili con IE 8 impostata sulla modalità di compatibilità per tutti i siti Intranet. Ho provato ad aggiungere il meta tag per disabilitare questa modalità per le pagine fornite dal mio sito ma IE ha ignorato costantemente questo tag. Come ha detto Lance nel suo post, l'aggiunta di un'intestazione di risposta ha risolto questo problema. Ecco come ho impostato l'intestazione in base al metodo HTML5 boilerplate:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

Affinché questa intestazione sia effettivamente inviata, devi assicurarti di avere mod_headers attivato in Apache. Se vuoi assicurarti di avere questa mod attivata, inseriscila in una pagina che può eseguire php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>

Il metodo .htaccess ha funzionato per me, in IE8 + Ha rimosso il pulsante di compatibilità (aka Enemy n. 1) e forza IE8 a evitare l'uso della modalità di compatibilità. Correlati: l'alternativa al meta tag sembra funzionare solo in determinate condizioni (IE Voodoo) su vari computer.
William Isted,

10

Per impostazione predefinita, IE8 utilizza la modalità standard per intERnet e la modalità quirks per intRAnet. Il meta tag HTML viene ignorato se il doctype è impostato su xhtml di transizione. La soluzione è aggiungere un'intestazione HTTP nel codice. Questo ha funzionato per noi. Ora il nostro sito intranet sta forzando IE8 a rendere l'app in modalità standard.

Aggiunto a PageInit della classe di pagina di base (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

riferimento: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html


3

Ciò è dovuto all'impostazione all'interno delle impostazioni di compatibilità IE che indica che tutti i siti Intranet devono essere eseguiti in modalità compatibilità. Puoi deselezionarlo tramite un criterio di gruppo (o semplicemente deselezionarlo in IE) oppure puoi impostare quanto segue:

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

Apparentemente non è possibile modificare le impostazioni della vista di compatibilità come criterio di gruppo, ma è qualcosa che forse può essere modificato nel registro, questo metatag funziona bene per me, ho dovuto far funzionare l'attributo richiesto come parte di un modulo HTML , ha funzionato in Chrome e Firefox, ma non IE.

Ecco una bella visione di ciò che i browser supportano ogni singolo elemento html 5.

http://html5readiness.com/

Si noti l'unico denominatore comune di Google Chrome, supporta tutto. Spero che questo sia di aiuto


Sembra che Firefox e IE 10 ora supportino anche tutto. Il grafico non lo rende così chiaro come per Chrome.
Tony L.,

0

Inserisci come primo elemento sotto il tag.

Ciò impone a IE di eseguire il rendering della pagina nella versione fisica di IE e ignora le "Impostazioni modalità" del browser. Questo può essere impostato negli strumenti di sviluppo, prova a cambiarlo in una versione precedente di IE per testarlo, questo dovrebbe essere ignorato e la pagina dovrebbe apparire esattamente la stessa.


0

Se hai accesso al server, il modo più affidabile per farlo è farlo sul server stesso, in IIS. Vai alle intestazioni di risposta HTTP IIS. Aggiungi nome: X-UA-compatibile
Valore: IE = bordo Questo sostituirà il tuo browser e il tuo codice.


Questo si reimposta sulla nuova distribuzione su IIS se impostato a livello di sito Web
Eman Pitts,

0

Se vuoi che ogni singola pagina web carichi il contenuto scelto e stai usando asp.net. Basta applicarlo come primo tag sotto il tag di intestazione in Viste> condivisi> Layout.cshtml

solo un consiglio

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.