Per impostazione predefinita, IE8 impone i siti Web Intranet in modalità compatibilità. Ho provato a cambiare la meta header in IE8, ma non riconosce la meta header e usa solo l'impostazione del browser. Qualcuno sa come disabilitarlo?
Per impostazione predefinita, IE8 impone i siti Web Intranet in modalità compatibilità. Ho provato a cambiare la meta header in IE8, ma non riconosce la meta header e usa solo l'impostazione del browser. Qualcuno sa come disabilitarlo?
Risposte:
È possibile ignorare la modalità di compatibilità in Intranet.
Per IIS, basta aggiungere il codice seguente a web.config. Ha funzionato per me con IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Equivalente per Apache:
Header set X-UA-Compatible: IE=Edge
E per nginx:
add_header "X-UA-Compatible" "IE=Edge";
E per express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen ha ragione, ma è un po 'più complicato ...
se stai usando il meraviglioso boilerplate di Paul Irish, avrai qualcosa di simile al seguente: -
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Questo NON funzionerà come previsto e importerà in IE la modalità di compatibilità in una Intranet ambiente se è selezionata l'opzione "Visualizza i siti Intranet nella vista compatibilità". È necessario rimuovere i commenti IE condizionali per impedire la modalità di compatibilità Intranet.
Quindi funzionerà il seguente codice:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Fondamentalmente se si attivano commenti IE condizionali prima <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
dell'istruzione, si verrà forzati alla modalità di compatibilità in un ambiente Intranet se si esegue IE9 con le impostazioni predefinite.
AGGIORNAMENTO - INFORMAZIONI AGGIUNTIVE: Nota che esiste un trucco che farà funzionare la piastra HTML5:
Aggiungi un commento condizionato e vuoto prima del DOCTYPE. E nota come pure, che quando si fa che , allora si può anche aggiungere commenti condizionali intorno alla X-UA-Compatible
direttiva, rendendo la pagina HTML5 valido pure. Quindi per esempio:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Un post sul blog che è stato ispirato dalla prima parte di questa risposta , ha più dettagli. E a proposito: Come accennato in questo post del blog, si può anche sostituire il commento condizionale prima del DOCTYPE con un semi condizionale commento con nessuna condizione : <!--[]-->
. Quindi, in questo modo:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Ma nota che quest'ultima variante ( <--[]--><!DOCTYPE html>
), come spiegato ad esempio da questa risposta a un'altra domanda , attiverà il ben noto problema che esso - per le versioni IE legacy senza supporto per X-UA-Compatioble
(leggi: per IE7 e IE6) - inserirà il browser in quirks mode.
Se si apre il menu "Strumenti" e si sceglie "Impostazioni di visualizzazione compatibilità" In quella finestra di dialogo in basso è presente un'impostazione "Visualizza siti intranet in modalità compatibilità". Se lo deselezioni, ciò dovrebbe risolvere il problema e IE utilizzerà la modalità basata su DOCTYPE.
C'è una certa confusione nelle risposte a questa domanda.
La risposta principale è attualmente una soluzione lato server che imposta un flag nell'intestazione http e alcuni commenti indicano che una soluzione che utilizza un metatag non funziona.
Penso che questo post sul blog offra una bella panoramica di come utilizzare le meta informazioni sulla compatibilità e nella mia esperienza funziona come descritto: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- UA-Compatible-per-creare-resistente-enterprise-web-applications.aspx
I punti principali:
Un punto importante (e penso che molta confusione provenga da questo punto) è che IE ha due "classi" di modalità:
La modalità documento determina il motore di rendering (come viene visualizzata la pagina Web).
La Modalità browser determina quale stringa IE User-Agent (UA) invia ai server, a quale Modalità IE predefinita per documento e come IE valuta i commenti condizionali.
Ulteriori informazioni sulla modalità documento rispetto alla modalità browser sono disponibili in questo articolo: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- sito-developers.aspx? reindirizzate = true
Nella mia esperienza, i metadati di compatibilità influenzeranno solo la modalità documento . Quindi, se fai affidamento sul rilevamento del browser, questo non ti aiuterà. Ma se si utilizza il rilevamento delle funzionalità, questa dovrebbe essere la strada da percorrere.
Quindi consiglierei di usare il meta tag (nella pagina html) usando questa sintassi:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Avviso: fornire un elenco di modalità browser testate per.
Il post sul blog suggerisce anche l'uso di EmulateIEX. Ecco una citazione:
Detto questo, una cosa che trovo strana è quando un'applicazione richiede EmulateIE7 o EmulateIE8. Queste modalità di emulazione sono esse stesse decisioni. Quindi, invece di essere specifico su ciò che vuoi, stai chiedendo una delle due cose e quindi determinando quale di queste due cose cercando altrove nel codice per un DOCTYPE (e quindi cercando di capire se quel DOCTYPE ti darà standard o stranezze a seconda del suo contenuto - un altro compito a volte confuso). Piuttosto che farlo, penso che abbia molto più senso specificare direttamente ciò che vuoi, piuttosto che dare una risposta che è essa stessa una domanda. Se si desidera standard IE7, utilizzare IE = 7, anziché IE = EmulateIE7. (Nota che questo non significa che non dovresti usare un DOCTYPE - dovresti.)
Prova questo metatag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Dovrebbe forzare il rendering di IE8 come Modalità standard IE8 anche se "Visualizza i siti Intranet in vista compatibilità" è selezionato [sia per Intranet o tutti i siti Web], l'ho provato da solo su IE 8.0.6
Il nostro amministratore di sistema ha risolto questo problema deselezionando la casella a livello globale per la nostra organizzazione. Gli utenti non avevano nemmeno bisogno di disconnettersi.
Ho trovato una risposta funzionante che consente di ignorare la Visualizzazione compatibilità intranet selezionata. Basta aggiungere all'evento OnInit della tua pagina questa riga (non sono necessarie meta o web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Prova a inserire quanto segue nell'intestazione:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Per gentile concessione della HTML5 Boilerplate di Paul Irish (ma funziona anche in XHTML Transitional).
Sono stato in grado di ignorare la modalità di compatibilità specificando il meta tag come IL PRIMO TAG nella sezione head, non solo il primo meta tag ma come e solo come il MOLTO PRIMO TAG .
Grazie a @ stefan.s per avermi inserito nella tua eccellente risposta. Prima di leggere che avevo:
QUESTO NON FUNZIONA
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
spostato il tag di collegamento e ha funzionato
QUESTI LAVORI :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Quindi un client IE8 impostato per usare la compatibilità rende la pagina come modalità Standard IE8 - il contenuto = 'IE = 9' significa usare lo standard più alto disponibile fino a IE9 incluso.
Questa non è esattamente una soluzione ma, penso che sia la migliore. Sui nostri siti intranet diciamo alle persone che è possibile accedere solo da Firefox, non accettiamo gentilmente gli utenti IE da queste parti. Controllare l'agente utente sul lato server o client e negare loro l'accesso da IE. E sono un programmatore .NET.
Avevo lottato con questo problema e volevo aiutare a fornire una soluzione unica e approfondimenti.
Alcuni framework basati su AJAX inietteranno javascript e fogli di stile all'inizio <head>
e, facendo ciò, sembra che la soluzione di metatag ben consolidata non funzioni correttamente. In questo caso ho scoperto che l'iniezione diretta nell'intestazione della risposta HTTP, proprio come la risposta di Andras Csehi risolverà il problema.
Per quelli di noi che usano Java Servlet, tuttavia, un buon modo per risolverlo è usare un ServletFilter.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Possiamo risolvere questo problema in ambiente Spring-Apache-tomcat aggiungendo una sola riga nel metodo RequestInterceptor -
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
Riferimento da - Come creare il filtro e modificare l'intestazione della risposta Descrive come possiamo risolvere questo problema tramite RequestInterceptor (Spring).
Se si desidera che il proprio sito Web imponga la modalità standard IE 8, utilizzare questo metatag insieme a un DOCTYPE valido:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Nota il valore "EmulateIE8" anziché il semplice "IE8".
Secondo gli sviluppatori IE, dovrebbe essere "Visualizza DOCTYPE di standard in modalità Standard IE8; Visualizza DOCTYPE di quirk in modalità Quirks. Usa questo tag per sovrascrivere la visualizzazione di compatibilità sui computer client e imporre gli standard agli standard IE8".
maggiori informazioni su questo post sul blog di IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Questa domanda è un duplicato della modalità browser Force "Internet Explorer 8" in Intranet .
Le risposte indicano che non è possibile disabilitare la visualizzazione di compatibilità (sul lato server) - https://stackoverflow.com/a/4130343/24267 . Questo sembra certamente essere il caso, poiché nessuno dei suggerimenti che ho provato ha funzionato. In IE8 la "Modalità browser" viene impostata sulla vista Compatibilità di Internet Explorer 8, indipendentemente dal tipo di intestazione compatibile con X-UA che invii.
Ho dovuto fare una gestione speciale per IE7 e la modalità di compatibilità, che ha causato il rendering del browser usando IE8 ma riferivo che era IE7, ha rotto il mio codice. Ecco come ho risolto il mio codice (sono consapevole che si tratta di un hack orribile e dovrei testare funzionalità non versioni del browser):
isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Trident") ! = -1) { // Bugiardo, questo è IE8 in modalità compatibilità. isIE8 = true; }
Aggiungi questo all'interno del tag head delle pagine (indirizzato alla versione IE che desideri):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Nota, questo NON cambierà il fatto che il browser dice che è in modalità compatibilità (chiamata modalità browser), ma la pagina verrà visualizzata in modalità standard IE8. Se il suo ANCORA non viene visualizzato come desideri, è probabilmente perché hai JavaScript che controlla erroneamente la versione di IE. Vedi il seguente post sul blog per determinare quale proprietà dovresti escludere perché anche se imposti il tag meta X-UA-Compatible, la stringa dell'agente utente continuerà a dire MSIE 7.0 .
Nel mio caso, per la correzione ho dovuto aggiungere un controllo per la modalità di compatibilità IE7. L'ho fatto usando un semplice codice javascript:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Per chiunque legga questo cercando di disabilitarlo tramite GPO per tutti gli utenti, questa è l'impostazione:
Configurazione computer / Modelli amministrativi / Componenti di Windows / Internet Explorer / Visualizzazione compatibilità / Attiva modalità standard Internet Explorer per Intranet locale
sebbene la modifica di web.config l'abbia corretto per me.
Cambia le intestazioni in .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Ho trovato la soluzione a questo problema qui: https://github.com/h5bp/html5-boilerplate/issues/378
Il commento di Stefan S sulla modalità documento rispetto alla modalità browser è stato molto pertinente per il mio problema.
Ho i metadati X-UA-Content nella pagina, ma stavo testando sul lato client la versione del browser tramite navigator.appVersion
. Questo test non riflette i metadati perché fornisce la modalità browser non la modalità documento.
La risposta per me è stata quella di testare document.documentMode
qualcosa del tipo:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Ora, il mio tag meta X-UA-Content si riflette nel mio test del browser.
Perché faccio una cosa così accigliata come testare il browser? Velocità. Vari dei miei componenti aggiuntivi di jQuery, come tablesorter, sono troppo lenti su IE6 / 7 e desidero disattivarli. Non sono sicuro che il test per le funzionalità del browser possa aiutarmi a risolvere questo altrimenti.