Par défaut, IE8 force les sites Web intranet en mode de compatibilité. J'ai essayé de changer l'en-tête méta en IE8, mais il ne reconnaît pas l'en-tête méta et utilise simplement le paramètre du navigateur. Quelqu'un sait-il comment désactiver cela?
Par défaut, IE8 force les sites Web intranet en mode de compatibilité. J'ai essayé de changer l'en-tête méta en IE8, mais il ne reconnaît pas l'en-tête méta et utilise simplement le paramètre du navigateur. Quelqu'un sait-il comment désactiver cela?
Réponses:
Il est possible de remplacer le mode de compatibilité dans l'intranet.
Pour IIS, ajoutez simplement le code ci-dessous au web.config. A travaillé pour moi avec IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Équivalent pour Apache:
Header set X-UA-Compatible: IE=Edge
Et pour nginx:
add_header "X-UA-Compatible" "IE=Edge";
Et pour express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen a raison MAIS c'est un peu plus compliqué ...
si vous utilisez le merveilleux passe-partout de Paul Irish, vous aurez quelque chose comme ceci: -
<!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">
Cela ne fonctionnera PAS comme prévu et forcera dans IE en mode de compatibilité dans un environnement Intranet si vous avez coché la case "Afficher les sites intranet dans la vue de compatibilité". Vous devez supprimer les commentaires IE conditionnels pour empêcher le mode de compatibilité intranet.
Le code suivant fonctionnera donc:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Fondamentalement, si vous déclenchez des commentaires IE conditionnels avant l' <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
instruction, vous serez forcé en mode de compatibilité dans un environnement Intranet si vous exécutez IE9 avec les paramètres par défaut.
MISE À JOUR - INFORMATIONS SUPPLÉMENTAIRES: Mais notez qu'il y a une astuce qui fera fonctionner la plaque bouillante HTML5:
Ajoutez un commentaire conditionnel vide avant le DOCTYPE. Et notez également que lorsque vous faites cela , vous pouvez également ajouter des commentaires conditionnels autour de la X-UA-Compatible
directive, ce qui rend également la page HTML5 valide. Ainsi, par exemple:
<!--[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 article de blog inspiré de la première partie de cette réponse contient plus de détails. Et par ailleurs: Comme mentionné dans ce blog, on peut aussi remplacer le commentaire conditionnel avant le DOCTYPE avec un demi conditionnel commentaire à aucune condition : <!--[]-->
. Ainsi, ainsi:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Mais notez que cette dernière variante ( <--[]--><!DOCTYPE html>
), comme expliqué par exemple par cette réponse à une autre question , activera le problème bien connu qui, pour les versions IE anciennes sans prise en charge de X-UA-Compatioble
(lire: pour IE7 et IE6), amènera le navigateur dans Mode de quirks.
Si vous déroulez le menu "Outils" et choisissez "Paramètres d'affichage de compatibilité" Dans cette boîte de dialogue en bas se trouve un paramètre "Afficher les sites intranet en mode de compatibilité". Si vous décochez cette option, cela devrait résoudre le problème et IE utilisera le mode basé sur le DOCTYPE.
Il y a une certaine confusion dans les réponses à cette question.
La première réponse est actuellement une solution côté serveur qui définit un indicateur dans l'en-tête http et certains commentaires indiquent qu'une solution utilisant une balise META ne fonctionne tout simplement pas.
Je pense que cette entrée de blog donne un bon aperçu de la façon d'utiliser les métadonnées de compatibilité et, selon mon expérience, fonctionne comme décrit: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-compatible-to-create-durable-enterprise-web-applications.aspx
Les points principaux:
Un point important (et je pense que beaucoup de confusion vient de ce point) est que IE a deux "classes" de modes:
Le mode document détermine le moteur de rendu (comment la page Web est-elle rendue).
Le mode navigateur détermine la chaîne d'agent utilisateur (UA) envoyée par IE aux serveurs, la valeur par défaut du mode document et la façon dont IE évalue les commentaires conditionnels.
Plus d'informations sur le mode document contre le mode navigateur peuvent être trouvées dans cet article: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx? Redirected = true
D'après mon expérience, les métadonnées de compatibilité n'influenceront que le mode document . Donc, si vous comptez sur la détection du navigateur, cela ne vous aidera pas. Mais si vous utilisez la détection de fonctionnalités, cela devrait être la voie à suivre.
Je recommanderais donc d'utiliser la balise meta (dans la page html) en utilisant cette syntaxe:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Remarque: donnez une liste des modes de navigation pour lesquels vous avez testé.
Le billet de blog déconseille également l'utilisation d'EmulateIEX. Voici une citation:
Cela étant dit, une chose que je trouve étrange est lorsqu'une application demande EmulateIE7 ou EmulateIE8. Ces modes d'émulation sont eux-mêmes des décisions. Donc, au lieu d'être précis sur ce que vous voulez, vous demandez l'une des deux choses, puis vous déterminez laquelle de ces deux choses en cherchant ailleurs dans le code un DOCTYPE (puis en essayant de comprendre si ce DOCTYPE vous donnera des normes ou bizarreries en fonction de son contenu - une autre tâche parfois déroutante). Plutôt que de le faire, je pense qu'il est beaucoup plus logique de spécifier directement ce que vous voulez, plutôt que de donner une réponse qui est elle-même une question. Si vous voulez des normes IE7, utilisez IE = 7, plutôt que IE = EmulateIE7. (Notez que cela ne signifie pas que vous ne devriez pas utiliser un DOCTYPE - vous devriez.)
Essayez cette balise META:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Cela devrait forcer IE8 à s'afficher en mode standard IE8 même si "Afficher les sites intranet dans la vue de compatibilité" est coché [pour l'intranet ou tous les sites Web], je l'ai essayé moi-même sur IE 8.0.6
Notre administrateur système a résolu ce problème en décochant la case globalement pour notre organisation. Les utilisateurs n'avaient même pas besoin de se déconnecter.
J'ai trouvé une réponse de travail qui permet de remplacer la vue de compatibilité intranet vérifiée. Ajoutez simplement dans l'événement OnInit de votre page cette ligne (pas besoin de meta ou web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Essayez de mettre ce qui suit dans l'en-tête:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Avec l'aimable autorisation de Paul Irish's HTML5 Boilerplate (mais cela fonctionne également dans XHTML Transitional).
J'ai pu remplacer le mode de compatibilité en spécifiant la balise META comme LE PREMIER TAG dans la section head, pas seulement la première balise META mais aussi et seulement comme le TRÈS PREMIER TAG .
Merci à @ stefan.s de m'avoir mis dessus dans votre excellente réponse. Avant de lire, j'avais:
CECI N'A PAS FONCTIONNÉ
<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" >
déplacé la balise de lien hors du chemin et cela a fonctionné
CELA FONCTIONNE :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Ainsi, un client IE8 configuré pour utiliser la compatibilité rend la page en mode standard IE8 - le contenu = 'IE = 9' signifie utiliser la norme la plus élevée disponible jusqu'à et y compris IE9.
Ce n'est pas exactement une solution, mais je pense que c'est la meilleure. Sur nos sites intranet, nous disons aux gens qu'il n'est accessible que par Firefox, nous ne prenons pas gentiment les utilisateurs d'IE ici. Vérifiez l'agent utilisateur côté serveur ou client et refusez-lui l'accès depuis IE. Et je suis un programmeur .NET.
J'avais eu du mal avec ce problème et je voulais aider à fournir une solution et un aperçu uniques.
Certains frameworks basés sur AJAX injectent des javascripts et des feuilles de style au début du <head>
et cela semble empêcher la solution de balise méta bien établie de fonctionner correctement. Dans ce cas, j'ai trouvé que l'injection directe dans l'en-tête de réponse HTTP, tout comme la réponse d'Andras Csehi, résoudra le problème.
Cependant, pour ceux d'entre nous qui utilisent des servlets Java, un bon moyen de résoudre ce problème consiste à utiliser un filtre de servlets.
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 {
}
}
Nous pouvons résoudre ce problème dans l'environnement Spring-Apache-tomcat en ajoutant une seule ligne dans la méthode 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;
}
Référence à partir de - Comment créer un filtre et modifier l'en-tête de réponse Il explique comment résoudre ce problème via un RequestInterceptor (Spring).
Si vous souhaitez que votre site Web force le mode standard IE 8, utilisez cette métabalise avec un DOCTYPE valide:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Notez la valeur "EmulateIE8" plutôt que la simple "IE8".
Selon les développeurs d'IE, cela devrait "Afficher les DOCTYPE de normes en mode Normes IE8; Afficher les DOCTYPE Quirks en mode Quirks. Utilisez cette balise pour remplacer la vue de compatibilité sur les machines clientes et forcer les normes aux normes IE8".
plus d'informations sur ce billet de blog IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Cette question est une copie du mode de navigation Force "Internet Explorer 8" dans l'intranet .
Les réponses indiquent qu'il n'est pas possible de désactiver la vue de compatibilité (côté serveur) - https://stackoverflow.com/a/4130343/24267 . Cela semble certainement être le cas, car aucune des suggestions que j'ai essayées n'a fonctionné. Dans IE8, le «mode navigateur» est défini sur la vue de compatibilité d'Internet Explorer 8, quel que soit le type d'en-tête compatible X-UA que vous envoyez.
J'ai dû faire une manipulation spéciale pour IE7 et le mode de compatibilité, ce qui a provoqué le rendu du navigateur en utilisant IE8, mais j'ai signalé que c'était IE7, a cassé mon code. Voici comment j'ai corrigé mon code (je suis conscient que c'est un horrible hack et je devrais tester des fonctionnalités et non des versions de navigateur):
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) { // Menteur, c'est IE8 en mode de compatibilité. isIE8 = vrai; }
Ajoutez ceci à l'intérieur de votre balise de tête de pages (en ciblant la version IE que vous voulez):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Remarque, cela ne changera PAS le fait que le navigateur indique son mode de compatibilité (appelé le mode navigateur), mais la page s'affichera en mode standard IE8. Si ce n'est PAS encore rendu comme vous le souhaitez, c'est probablement parce que vous avez javascript qui vérifie par erreur la version IE. Consultez le billet de blog suivant pour déterminer de quelle propriété vous devez vous déconnecter, car même si vous définissez la balise compatible Meta X-UA, la chaîne de l'agent utilisateur indiquera toujours MSIE 7.0 .
Dans mon cas, pour le correctif, j'ai dû ajouter une vérification pour le mode de compatibilité IE7. Je l'ai fait en utilisant un simple code javascript:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Pour toute autre personne lisant ceci qui cherche à désactiver cela via GPO pour tous les utilisateurs, voici le paramètre:
Configuration ordinateur / Modèles d'administration / Composants Windows / Internet Explorer / Affichage de compatibilité / Activer le mode standard d'Internet Explorer pour l'intranet local
bien que l'édition web.config l'ait corrigé pour moi.
Modifier les en-têtes dans .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Trouvé la solution à ce problème ici: https://github.com/h5bp/html5-boilerplate/issues/378
Le commentaire de Stefan S sur le mode document par rapport au mode navigateur était très pertinent pour mon problème.
J'ai les métadonnées X-UA-Content dans la page, mais j'étais en train de tester la version du navigateur côté client via navigator.appVersion
. Ce test ne reflète pas les métadonnées car il donne au mode navigateur et non au mode document.
La réponse pour moi a été de tester document.documentMode
quelque chose comme:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Maintenant, ma balise meta X-UA-Content se reflète dans mon test de navigateur.
Pourquoi est-ce que je fais une chose aussi désapprouvée que de tester le navigateur? La vitesse. Divers de mes compléments jQuery, comme tablesorter, sont tout simplement trop lents sur IE6 / 7, et je veux les désactiver. Je ne suis pas sûr que le test des fonctionnalités du navigateur puisse m'aider à résoudre ce problème autrement.