Remplacer le mode de compatibilité intranet IE8


200

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?


1
Essayez stackoverflow.com/questions/2742853/… , qui a fonctionné pour moi.
David Kolar

2
Ajoutez ceci à l'intérieur de votre balise de tête de pages: <meta http-equiv = "X-UA-Compatible" content = "IE = 8" /> (en ciblant la version IE que vous voulez). 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. Vous devrez ensuite modifier javascript pour vérifier la présence de "trident" si vous recherchez IE8 ou une version ultérieure. Voir: blogs.msdn.com/b/mikeormond/archive/2008/09/25/…
n00b

@ n00b - cela n'a aucun effet sur mon site.
Pete

Ma compréhension est que la balise meta doit moi immédiatement après la balise head. J'ai remarqué que certains scripts seront insérés dans head à l'index 0; ainsi, la balise META ne sera plus après la tête.
AMissico

Réponses:


224

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')

20
Ceci est la bonne réponse. La balise meta n'a rien, mais l'ajout de l'en-tête de réponse fonctionne. Plus d'informations ici: social.msdn.microsoft.com/Forums/is/iewebdevelopment/thread/…
russau

3
Se mettre d'accord. Cela devrait être la bonne réponse car elle remplace correctement les paramètres intranet pour ce site Web uniquement.
enriquein

9
(pour clarifier: cela fonctionne pour le mode document, mais pas pour le mode navigateur)
codeulike

21
Ce n'est pas la bonne réponse. cette réponse modifie le mode document, elle NE change PAS l'important "mode navigateur". Je cherche toujours une solution à ce problème.
DeveloperChris

4
Ce n'est pas la bonne réponse, car elle est spécifique à .net (sans même le reconnaître).
Daddy32

84

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-Compatibledirective, 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.


Cela n'a pas résolu le problème pour moi. Cependant, pour info, l'ajout du "X-UA-Compatible" comme en-tête DID résout le problème!
Scott Rippey

34

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.


19
Je n'ai pas downvote, mais je suppose que c'est parce que vous avez répondu du point de vue de l'utilisateur (ce qu'un utilisateur devrait faire). Cette question provient d'un développeur Web et demande comment résoudre le problème sans exiger de l'utilisateur qu'il fasse quoi que ce soit en particulier.
Roy Tinker

1
De plus, cela ne permet pas de maintenir la compatibilité avec les anciennes applications. Si vous décochez ce paramètre, vos anciennes applications risquent de ne plus pouvoir les mettre à jour. Je pense que le demandeur cherche un moyen de forcer le mode standard lorsque toutes les autres applications sur leur intranet nécessitent que la case à cocher soit vérifiée pour le mode de compatibilité.
Andrew Lewis

2
Je pense qu'il y a répondu du point de vue du programmeur. "... IE utilisera la base de mode sur le DOCTYPE". Voir: msdn.microsoft.com/en-us/library/ms535242%28VS.85%29.aspx Si la société exécute Active Directory, les modifications des paramètres du navigateur peuvent être propagées par l'administrateur. Vous ne pouvez pas faire ça avec FireFox!
Nate Zaugg

@AndrewLewis peut-être. Mais, il y a le bouton du mode de compatibilité dans la barre d'URL qui configurera le navigateur pour utiliser le mode compat pour ce site spécifique. Ou vous pouvez les ajouter manuellement dans la boîte de dialogue. Encore une fois, ce truc peut être fait globalement par l'informatique.
PilotBob

2
@PilotBob si vous avez plus de 120 000 utilisateurs et des centaines (sinon des milliers) de sites intranet à prendre en charge, ce n'est pas une solution viable.
yorch

19

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:

  • définir les informations à l'aide d'une balise META et dans l'en-tête les deux travaux
  • La balise META a priorité sur l'en-tête
  • La balise meta doit être la première balise, pour vous assurer que le navigateur ne détermine pas le moteur de rendu avant basé sur l'heuristique

Un point important (et je pense que beaucoup de confusion vient de ce point) est que IE a deux "classes" de modes:

  1. Le mode document
  2. Le mode navigateur

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.)


comment changer le mode navigateur?
Vishnudev K

la phrase en mode navigateur prête à confusion
Justice Fist

@JusticeFist Oui, vous avez raison, merci. J'ai essayé de l'améliorer.
stefan.s

1
@VishnudevK La seule façon que je connaisse est d'utiliser les outils de développement. Mais vous voulez probablement une solution programmatique.
stefan.s

9

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


15
Non.
Dennis C

11
C'est en fait correct, mais il DOIT apparaître avant toutes les balises META de la page, sinon cela ne fonctionnera pas.
Michael Irigoyen

2
Cela ne fonctionne pas pour moi. Pour autant que je sache, IE8 "Afficher les sites intranet en mode de compatibilité" est
irréversible

6
(pour clarifier: cela fonctionne pour le mode document, mais pas pour le mode navigateur. Le rendu est donc fixe, mais le navigateur prétend toujours être IE7)
codeulike

7

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.

entrez la description de l'image ici


1
Cette solution fonctionne parfaitement si tous les sites sur l'intranet peuvent utiliser les dernières normes Web. Cependant, si certains ne le peuvent pas, cette méthode les brisera par inadvertance ... J'aborderais avec prudence.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

4

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");

1
Réponse spécifique à la plateforme de développement ... sans même spécifier la plateforme. Je suppose que vous parlez de Visual Studio .NET? Autant que je sache, l'événement «OnInit» n'existe pas (en Javascript, Java, PHP, ....)
Stijn de Witt

3

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).


3

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.


2

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.


1
J'aime votre idée. mais nous n'avons pas de firefox ici.
Dennis C

22
Pire. Suggestion. Déjà. C'est aussi mauvais que tous les sites intranet qui sont uniquement IE. Essayez de faire un peu de travail supplémentaire et de faire fonctionner vos trucs sur tous les navigateurs courants. Ce n'est pas si dur.
mhenry1384

2
@ mhenry1384 Vous voulez expliquer pourquoi c'est une terrible suggestion d'avoir un système intranet verrouillé? Vous n'avez pas à prendre en charge les quarks pour les anciens navigateurs. Vous savez que vos utilisateurs auront l'expérience souhaitée. Ce n'est pas un système public, peu importe, supportez-vous toujours IE 5.5? Je dis à mes utilisateurs publics de mettre à jour. Je ne devrais pas perdre mon temps sur les systèmes backend de toute façon, c'est le public qui a besoin de moi. Ce n'est pas comme si je le verrouillais sur IE 6 et nécessitais ActiveX comme certains. Par exemple, mon système autorise Firefox 6 et supérieur. Donc, si Firefox 27 sort, cela fonctionne toujours. Soit me downvote ou faire un argument réel.
Caimen

2
Chaque site intranet que j'ai utilisé et verrouillé sur un navigateur spécifique est verrouillé sur IE. Cela me rend fou, car je déteste IE autant que le prochain gars. Forcer vos utilisateurs à utiliser le navigateur de votre choix (pas le leur), même s'il s'agit de quelque chose MAIS IE, semble contraire au web, même au web intranet. Il n'est généralement pas si difficile de faire fonctionner un site Web dans IE7 / 8/9, surtout si vous utilisez des bibliothèques comme jQuery. Laissez les utilisateurs utiliser ce qu'ils veulent.
mhenry1384

2
Un site écrit pour Firefox 10, par exemple, fonctionnera presque toujours parfaitement bien sur IE9 sans modification. Donc, restreindre les utilisateurs à l'utilisation d'IE9 signifie qu'il se passe autre chose. Cela indique que vous êtes sur une mission généalogique, pas quelqu'un qui essaie d'écrire un bon logiciel web. S'il s'agissait simplement de ne pas avoir le temps de tester des navigateurs autres que Firefox, restreignez-vous également les utilisateurs d'Opera? [Désolé d'être si verbeux. Je devrais revenir à réparer ce fichu problème IE8 que j'ai ... :-)]
mhenry1384

1

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 {
}

}

1

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).


0

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


0

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;
}

0

Eu le même problème. Cela a fonctionné en utilisant

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

0

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 }

0

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.


Pour accéder à l'Éditeur de stratégie de groupe locale , vous pouvez exécuter gpedit.msc à partir de Exécuter.
ROMANIA_engineer


0

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.documentModequelque 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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.