Forcer le mode de compatibilité IE à désactiver à l'aide de balises

375

Je travaille pour un client qui force le mode de compatibilité sur tous les sites intranet. Je me demandais s'il y avait une balise que je pouvais mettre dans mon HTML pour désactiver le mode de compatibilité.

Al Katawazi
la source
Je pense que la réponse que vous cherchez est ici: stackoverflow.com/questions/1014666/…
Gabriel
45
En fait, je cherchais exactement le contraire, qui définit leur norme en mode de compatibilité, c'est juste fou.
Al Katawazi
12
Mauvais javascript sur une application héritée qui se bloque sur autre chose qu'IE7, c'est qui définit leur standard de compatibilité. Un jour, nous allons le remplacer ...
Pete the pagan-gerbil
1
@ petethepagan-gerbil avez-vous réussi à le remplacer? : P
icedwater
1
@icedwater J'ai quitté l'entreprise il y a plus de 6 ans :) Nous avons apporté de petites améliorations pour éliminer les problèmes chaque fois que nous avions un changement dans le même domaine, mais la dette technologique n'y était jamais priorisée. Je ne sais pas si cela a finalement été corrigé.
pete the pagan-gerbil

Réponses:

535

Il y a le mode "bord" .

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

À partir de la page MSDN liée:

Le mode Edge indique à Windows Internet Explorer d'afficher le contenu dans le mode le plus élevé disponible, ce qui rompt en fait le paradigme du «verrouillage». Avec Internet Explorer 8, cela équivaut au mode IE8. Si une future version (hypothétique) d'Internet Explorer prend en charge un mode de compatibilité supérieur, les pages définies en mode Edge apparaissent dans le mode le plus élevé pris en charge par cette version; cependant, ces mêmes pages apparaissent toujours en mode IE8 lorsqu'elles sont affichées avec Internet Explorer 8.

Cependant, le mode "bord" n'est pas encouragé lors de l'utilisation en production:

Il est recommandé aux développeurs Web de restreindre leur utilisation du mode Edge pour tester les pages et autres utilisations hors production en raison des résultats inattendus possibles du rendu du contenu des pages dans les futures versions de Windows Internet Explorer.

Honnêtement, je ne comprends pas entièrement pourquoi. Mais selon cela, la meilleure façon de faire en ce moment est d'utiliser IE=8.

Pekka
la source
7
Au 8/6/2012, Microsoft semble utiliser IE=10sur ses propres sites. Si vous avez testé votre site dans IE10 (version d'aperçu), vous pouvez l'utiliser en toute sécurité; sinon, vous voudrez peut-être vous y tenir IE=9pour l'instant.
calvinf
75
J'ai constaté que cela ne fonctionne PAS si l'utilisateur (ou l'administrateur système) a activé le mode de compatibilité par défaut en accédant à Tools->Compatibility View Settingset en cochant Afficher tous les sites Web dans la vue de compatibilité. Pour résoudre le problème, je dois retourner l'en-tête dans la réponse HTTP:X-UA-Compatible: IE=edge
speedplane
10
+1 vers speedplane - Le mode de compatibilité IE10 est activé par défaut pour les sites intranet - UGH ... merci pour la recherche!
viperguynaz
132
Un conseil pour ceux qui trouvent cette réponse, mais ne parviennent pas à la faire fonctionner pour eux. La balise méta de compatibilité DOIT être la première balise méta, et il ne peut y avoir AUCUNE instruction conditionnelle IE avant la balise. Plus: tesmond.blogspot.com/2011/10/…
Chris Sobolewski
2
Merci Chris! J'ai eu du mal avec cela pendant 30 minutes quand j'ai finalement lu votre commentaire. Je ne l'avais pas d'abord.
Hawkee
91

Après plusieurs heures de dépannage de ce problème ... Voici quelques faits saillants rapides qui nous ont aidés à partir des X-UA-Compatibledocuments: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

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

  • Les modes d' agent utilisateur standard (non émulés) ignorent<!DOCTYPE> directives de votre page et s'affichent en fonction des normes prises en charge par cette version d'IE (par exemple, IE=8obéiront mieux à l'espacement des bordures de table et à certains pseudo-sélecteurs IE=7).

  • Tandis que le modes Emulate indiquent à IE de suivre toutes les <!DOCTYPE>directives de votre page, le mode standard de rendu basé sur la version que vous choisissez et le mode excentrique basé surIE=5

  • Les valeurs possibles pour l' contentattribut sont:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

brandonjp
la source
67

Si vous travaillez avec une page dans la zone Intranet, vous pouvez constater qu'IE9, quoi que vous fassiez, passe en mode de compatibilité IE7.

Cela est dû au paramètre dans les paramètres de compatibilité IE qui stipule que tous les sites intranet doivent s'exécuter en mode de compatibilité. Vous pouvez décocher cela via une stratégie de groupe (ou simplement le décocher dans IE), ou vous pouvez définir les éléments suivants:

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

Cela fonctionne (comme détaillé dans d'autres réponses), mais peut ne pas apparaître initialement: cela doit venir avant que les feuilles de style ne soient déclarées . Si vous ne le faites pas, il est ignoré.

Amadière
la source
3
merci pour l'avertissement concernant la feuille de style, cela causait des problèmes et j'en connais la raison maintenant!
eMRe
Oui, initialement agressé par placement. Merci d'avoir ajouté ceci.
John Moylan
Merci qui a été très utile. Ils ont un GPO qui définit le niveau IE effectif à 7 même si IE 11 est installé. Cela m'a évité d'avoir à mettre des cales sur le site pour que les js fonctionnent.
Charles Owen
28

Je pense que cela fera l'affaire:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Peter Ruderman
la source
28

Comme suggéré dans cette réponse à une question connexe, le mode "edge" peut être défini dans le fichier Web.Config. Cela le fera s'appliquer à tout le HTML renvoyé par l'application sans avoir besoin de l'insérer dans des pages individuelles:

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

Cette même étape peut également être accomplie en modifiant les «en-têtes de réponse HTTP» à l'aide du gestionnaire IIS pour le serveur IIS, l'ensemble du site Web ou des applications spécifiques.

Erik Anderson
la source
19

La solution de balise META ne fonctionnait pas pour nous, mais la définir dans l'en-tête de réponse a fait:

header('X-UA-Compatible: IE=edge,chrome=1');
Lance Anderson
la source
3
+1 pour le 'chrome = 1'; Je n'ai jamais su ça. Pour ce que ça vaut, le changer en IE = 10 a résolu un certain nombre de problèmes de rendu sur mon site sur lesquels IE = edge n'avait aucun effet.
Explication de la chrome=1propriété, stackoverflow.com/a/22059516/368691 . Gardez à l'esprit que Chrome Frame a été retiré. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
1
voir les commentaires sur d'autres réponses ... J'ai constaté que cela ne fonctionne PAS si l'utilisateur (ou l'administrateur système) a activé le mode de compatibilité par défaut en allant dans Outils-> Paramètres d'affichage de compatibilité et en cochant Afficher tous les sites Web dans l'affichage de compatibilité . speedplane 19 avril 13 à 11:29 7 La balise méta de compatibilité DOIT être la première balise méta, et il ne peut y avoir AUCUNE instruction conditionnelle IE avant la balise. En savoir plus: tesmond.blogspot.com/2011/10/… - Chris Sobolewski 19 août 13 à 20:23
felickz
J'ai essayé de le mettre sur la première ligne de la page de mise en page. Cela ne fonctionne pas, Stu a mentionné la modification des en-têtes de réponse HTTP IIS. J'ai essayé. J'ai redémarré le pool d'applications. J'inspecte plus. Cette page est imbriquée sous une autre page. L'autre page a une autre méta. Ceci est le site de production. Tant de gens accèdent à cette page. mettre cette étiquette sur le dessus est une mission impossible. Toute autre solution ou je vis
user12345
10

Juste quelques notes supplémentaires sur ce sujet basées sur mes expériences récentes. L'université pour laquelle je travaille pose des problèmes d'ordinateurs portables avec IE 8 en mode de compatibilité pour tous les sites intranet. J'ai essayé d'ajouter la balise meta pour désactiver ce mode pour les pages servies par mon site, mais IE a systématiquement ignoré cette balise. Comme Lance l'a mentionné dans son article, l'ajout d'un en-tête de réponse a résolu ce problème. Voici comment j'ai défini l'en-tête en fonction de la méthode passe-partout HTML5:

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

Pour que cet en-tête soit réellement envoyé, vous devez vous assurer que les mod_headers sont activés dans Apache. Si vous voulez vous assurer que ce mod est activé, placez-le dans une page qui peut exécuter php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
la source
La méthode .htaccess a fonctionné pour moi, dans IE8 +. Elle a supprimé le bouton de compatibilité (alias ennemi n ° 1) et force IE8 à éviter d'utiliser le mode de compatibilité. Connexes: l'alternative aux balises META ne semble fonctionner que sous certaines conditions (IE Voodoo) sur divers ordinateurs.
William Isted
10

IE8 utilise par défaut le mode standard pour l'intERnet et le mode excentrique pour l'intRAnet. La balise Meta HTML est ignorée si le doctype est défini sur xhtml transitionnel. La solution consiste à ajouter un en-tête HTTP dans le code. Cela a fonctionné pour nous. Maintenant, notre site intranet oblige IE8 à rendre l'application en mode standard.

Ajouté à PageInit de la classe de page de base (ASP.net C #):

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

référence: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

rswank
la source
3

Cela est dû au paramètre dans les paramètres de compatibilité IE qui stipule que tous les sites intranet doivent s'exécuter en mode de compatibilité. Vous pouvez décocher cela via une stratégie de groupe (ou simplement le décocher dans IE), ou vous pouvez définir les éléments suivants:

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

Apparemment, il n'est pas possible de modifier les paramètres d'affichage de compatibilité en tant que stratégie de groupe, mais c'est quelque chose qui peut peut-être être modifié dans le registre, cette balise META fonctionne bien pour moi, j'ai dû faire fonctionner l'attribut requis dans le cadre d'un formulaire html , cela fonctionnait dans Chrome et Firefox mais pas IE.

Voici un bon visuel de ce que les navigateurs prennent en charge chaque élément html 5 individuel.

http://html5readiness.com/

Remarquez le seul dénominateur commun Google Chrome, il prend tout en charge. J'espère que cela vous sera utile

Accroupissement
la source
Il semble que Firefox et IE 10 prennent désormais tout en charge également. Le graphique ne rend pas cela aussi clair que pour Chrome.
Tony L.
0

Insérez comme tout premier élément sous la balise.

Cela oblige IE à restituer la page dans la version physique d'IE et ignore le "paramètre de mode" du navigateur. Cela peut être défini dans les outils de développement, essayez de le changer pour une ancienne version d'IE à tester, cela doit être ignoré et la page doit être exactement la même.

technocrusaders.com
la source
0

Si vous avez accès au serveur, la façon la plus fiable de le faire est de le faire sur le serveur lui-même, dans IIS. Accédez aux en-têtes de réponse HTTP IIS. Ajouter un nom: X-UA-Compatible
Valeur: IE = edge Cela remplacera votre navigateur et votre code.

stu
la source
Cela se réinitialise sur le nouveau déploiement vers IIS s'il est défini au niveau du site Web
Eman Pitts
0

Si vous souhaitez que chaque page Web individuelle charge le contenu choisi et utilise asp.net. Il suffit de l'appliquer comme première balise sous la balise de titre dans Vues> partagé> Layout.cshtml

juste un conseil

rubypeach888
la source