IE10 est rendu en mode IE7. Comment forcer le mode Standards?

Réponses:

244

Internet Explorer part du principe que la plupart des pages Web ont été écrites pour cibler des versions antérieures d'IE et examine le doctype, les balises meta et HTML pour déterminer le meilleur mode de compatibilité (parfois incorrectement). Même avec un doctype HTML5, IE placera toujours votre site Web en mode de compatibilité s'il s'agit d'un site intranet.

Pour vous assurer que votre site Web utilise toujours le dernier mode standard, vous pouvez vous assurer qu'il Display intranet sites in Compatiblyest désactivé. Cependant, vous devez le faire sur chaque machine locale du serveur Web (les instructions sont ci-dessous).

Alternativement, et mieux encore, vous pouvez utiliser l'en- X-UA-Compatibletête pour désactiver cela à partir du serveur. Il est important de noter que l' utilisation de la balise meta ne fonctionnera pas!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

Tout au long de MSDN, il est mentionné que l'utilisation d'un en-tête d'hôte ou d'une balise Meta devrait remplacer même les sites intranet. L'article Comprendre les modes de compatibilité dans Internet Explorer 8 dit ce qui suit.

Un grand nombre de sites Web d'entreprise internes sont optimisés pour Internet Explorer 7, cette exception par défaut préserve donc cette compatibilité. ... Encore une fois, si une balise Meta ou un en-tête http est utilisé pour définir un mode de compatibilité avec le document, il remplacera ces paramètres.

Cependant, dans la pratique, cela ne fonctionnera pas, l'utilisation d'un en-tête d'hôte est la seule option qui fonctionne. La section commentaires de l'article montre également de nombreux exemples de ce problème exact.

L'utilisation d'une balise Meta pose également plusieurs autres problèmes tels que l'ignorance de la balise si elle n'est pas directement sous la <head>balise ou s'il y a trop de données devant elle (4k). Cela peut également déclencher la révision du document dans certaines versions d'IE, ce qui ralentira le rendu. Vous pouvez en savoir plus sur ces problèmes dans l'article MSDN Meilleures pratiques: Mettez votre HEAD en ordre .

Ajout de l'en-tête compatible X-UA

Si vous utilisez .NET et IIS, vous pouvez l'ajouter au web.config, vous pouvez également le faire par programme:

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

Si vous n'utilisez pas IIS, il est facile de le faire dans n'importe quelle langue. Par exemple, voici comment le faire en PHP:

header('X-UA-Compatible: IE=edge');

Tant que l'en- X-UA-Compatibletête est présent avec le doctype HTML5, un site fonctionnera toujours dans le dernier mode standard.

Désactivation de la vue de compatibilité
Il peut être utile de désactiver la vue de compatibilité. Pour ce faire, décochez Display all intranet sites in compatibility viewdans les paramètres d' affichage de compatibilité.

Paramètres d'affichage de compatibilité

Vous pouvez en parler en appuyant sur Altpour obtenir le menu.

entrez la description de l'image ici

Modifier Cette réponse concerne également IE9.

Daniel Little
la source
Pardonnez mon ignorance, mais comment accéder à cette feuille de paramètres? J'ai vérifié les paramètres d'Internet Explorer, fait un clic droit sur la vue de compatibilité dans la barre d'adresse - rien.
firedev
2
@Nick utilise altpour faire apparaître la barre d'outils, c'est sous outils -> paramètres de vue compat
Daniel Little
Oh merci, on dirait que ça l'a résolu. On se demande pourquoi ils ont fait cela.
firedev
25
+1000;). SO devrait forcer chaque OP à voir cette réponse, quand ils ont une balise [IE] et un mot "compatible" dans leur question, avant même de poster cette question.
Teemu
2
J'ai essayé d'ajouter la section des en-têtes personnalisés au web.config du projet. Il semblerait que le paramètre ne remplace pas le paramètre IE pour l'utilisation de la vue de compatibilité pour les sites intranet.
DomenicDatti
25

Cela fonctionne pour moi.

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
JGilmartin
la source
11
NB comme le dit Lavinski ci-dessus, "la balise meta ne fait rien pour les sites intranet."
Nathan le
2
Pour ce que cela vaut, pour un site Web hébergé (site non intranet) qui a la X-UA-Compatiblebalise meta, mais qui ne déclenche toujours pas le mode document des normes IE10 comme page par défaut, j'ai trouvé que si la balise meta est située sous les balises de script ou est juste trop loin du haut de l' <head>arborescence DOM, IE10 pleure et définit le mode document sur les normes IE8. Alors, gardez votre IE=edgebalise META à proximité de la <title>balise. Ce n'est pas toujours un simple correctif pour les sites Wordpress lorsqu'il n'est pas codé en dur dans le fichier de modèle d'en-tête. Je ne sais pas si IE11 se soucie de l'emplacement de la balise Meta, mais j'espère que cela sera utile à quelqu'un.
purefusion
1
Pour les copies aveugles et les pasteurs comme moi, il manque la balise de fermeture. . <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
John Newman
Vous n'avez besoin de fermer la balise
Meta que
2
Cette balise doit également être la première balise à l'intérieur de <head>
Chris Gunawardena
10

Essayez d'ajouter la balise suivante à la tête

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
Jeow Li Huan
la source
5
Cela devrait être à la IE=Edgeplace
Daniel Little
1
Mais il y a un risque que les futures versions d'IE ne
fassent
7
Non, ce n'est pas un risque si vous suivez les spécifications, vous ne voyez pas de personnes faire cela pour Chrome.
Daniel Little
1
Cette balise doit être la première balise à l'intérieur de <head>
Chris Gunawardena
1
La modification de cette réponse montre pourquoi ce n'est pas une bonne idée. La réponse acceptée est la meilleure solution.
David Granado
2

La balise meta ne fait rien pour les sites intranet et mon problème était le rendu IE10 en mode de compatibilité IE10. Ce qui a résolu le problème pour moi était de pousser plus loin la réponse de @ Jeow et d'utiliser cette valeur dans un en-tête http en ajoutant ce qui suit web.configsous IIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

À des fins d'IE, les sites intranet incluent des sites publics qui ne sont pas acheminés vers l'extérieur - par exemple, un employé de Stackoverflow travaillant depuis le bureau verrait probablement stackoverflow.com en mode de compatibilité.

ov
la source
1

Cela a parfaitement fonctionné pour moi lorsque j'ai fait ce qui suit:

Sur http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

Utilisé l'exemple exact qu'ils fournissent dans la première case (ajouté le manquant </html>en bas), l'a ouvert dans IE10 et les normes ont été forcées, je pense que vous aurez peut-être besoin d'un contenu réel dans le html pour forcer les normes pas sûr.

Ma suggestion serait de remplacer votre code vide par du contenu réel (quelque chose de simple) et de voir ce qu'il fait.

ZacNespral21
la source