web-dev-qa-db-fra.com

Forcer le mode de compatibilité IE au moyen de balises

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 peux insérer dans mon code HTML qui force le mode de compatibilité à désactiver.

361
Al Katawazi

Il y a le mode "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>

À partir de la page MSDN liée:

Le mode Edge demande à Windows Internet Explorer d’afficher le contenu dans le mode le plus élevé disponible, ce qui brise le paradigme du "verrouillage". Avec Internet Explorer 8, cela équivaut au mode IE8. Si une version future (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. toutefois, ces mêmes pages apparaîtront toujours en mode IE8 si elles sont affichées avec Internet Explorer 8.

Cependant, le mode "Edge" n'est pas encouragé en production:

Il est recommandé aux développeurs Web de limiter leur utilisation du mode Edge pour tester des pages et d'autres utilisations non destinées à la production en raison des résultats inattendus possibles du rendu du contenu de la page dans les versions futures de Windows Internet Explorer.

Honnêtement, je ne comprends pas tout à fait pourquoi. Mais selon cela, la meilleure solution consiste à utiliser IE=8.

517
Pekka 웃

Après de nombreuses heures de dépannage, voici quelques faits saillants qui nous ont aidés dans la documentation X-UA-Compatible: http://msdn.Microsoft.com/en-us/library/cc288325 (VS. 85) .aspx # ctl00_contentContainer_ctl16

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

  • Les modes Standard User Agent (les non-émulés) ignorent les directives <!DOCTYPE> de votre page et sont restitués en fonction des normes prises en charge par cette version. de IE (par exemple, IE=8 respectera mieux l'espacement des bordures de la table et certains pseudo-sélecteurs que IE=7).

  • Alors que les modes Emulate indiquent à IE de suivre les directives <!DOCTYPE> de votre page, le mode de rendu des normes basé sur la version vous choisissez et le mode quirks basé sur IE=5

  • Les valeurs possibles pour l'attribut content 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"

91
brandonjp

Si vous travaillez avec une page de la zone Intranet, vous constaterez peut-être qu'IE9, quelle que soit votre activité, passe en mode IE7 Compat.

Cela est dû au paramètre défini dans IE Compatibility, qui indique que tous les sites Intranet doivent s'exécuter en mode de compatibilité. Vous pouvez la désélectionner via une stratégie de groupe (ou simplement la désélectionner 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 ainsi: il doit arriver avant que les feuilles de style soient déclarées. Si vous ne le faites pas, il est ignoré.

64
Amadiere

Je crois que cela fera l'affaire

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

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 appliquer à tout le code HTML renvoyé par l'application sans qu'il soit nécessaire 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 de IIS Manager pour le serveur IIS, le site Web entier ou des applications spécifiques.

26
Erik Anderson

La solution de balise méta ne fonctionnait pas pour nous, mais la placer dans l'en-tête de la réponse a eu les effets suivants:

header('X-UA-Compatible: IE=Edge,chrome=1');
18
Lance Anderson

Juste quelques notes supplémentaires sur ce sujet, basées sur mes expériences récentes. L'université dans laquelle je travaille travaille sur des ordinateurs portables avec IE 8 configuré 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 message, l'ajout d'un en-tête de réponse a résolu ce problème. Voici comment définir l'en-tête en fonction de la méthode 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>

Pour que cet en-tête soit effectivement envoyé, vous devez vous assurer que mod_headers est activé dans Apache. Si vous voulez vous assurer que ce mod est activé, placez-le dans une page pouvant exécuter php:

<pre>
<?php
    print_r(Apache_get_modules());
?>
</pre>
10
Cloudkiller

IE8 passe par défaut en mode standard pour intERnet et en mode quirks pour intRAnet. La balise méta 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 force 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

9
rswank

Cela est dû au paramètre défini dans IE Compatibility, qui indique que tous les sites Intranet doivent s'exécuter en mode de compatibilité. Vous pouvez la désélectionner via une stratégie de groupe (ou simplement la désélectionner 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 de la vue de compatibilité en tant que stratégie de groupe, mais c’est quelque chose qui peut éventuellement être modifié dans le registre. Cette balise méta fonctionne bien pour moi. , cela a fonctionné dans chrome et Firefox mais pas IE.

Voici un joli visuel de ce que les navigateurs supportent chaque élément HTML 5 individuel.

http://html5readiness.com/

Notez le dénominateur commun Google Chrome: il supporte tout. J'espère que cela vous aidera

3
Crouch

Insérer comme tout premier article sous la balise.

Ceci oblige IE à rendre la page dans la version physique d'Internet Explorer et ignore le "paramètre de mode" du navigateur. Cela peut être défini dans les outils de développement. Essayez de le remplacer par une version antérieure de IE à tester. Cette opération doit être ignorée et la page doit être identique.

0
technocrusaders.com

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

0
stu

Si vous souhaitez que chaque page Web charge le contenu choisi et utilisez asp.net. Appliquez-la simplement comme première balise sous la balise de titre dans Vues> partagées> Layout.cshtml

juste un pourboire

0
rubypeach888