web-dev-qa-db-fra.com

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

Sur le site de Microsoft, ils affirment qu'une simple déclaration de doctype suffit. Mais même un document aussi court que celui-ci revient en mode IE7:

<!DOCTYPE html>
<html>
<head>
   <title></title>
</head>
<body>

</body>
</html>

http://d.pr/i/fvzb+

121
firedev

Internet Explorer suppose que la plupart des pages Web ont été écrites pour cibler les versions antérieures de IE et examine le type de document, les balises méta et le code HTML pour déterminer le meilleur mode de compatibilité (parfois de manière incorrecte). Même avec un doctype HTML5, IE placera 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 que Display intranet sites in Compatibly est désactivé. Cependant, vous devez le faire sur chaque machine locale du serveur Web (voir instructions ci-dessous).

Sinon, vous pouvez utiliser l’en-tête compatible X-UA pour désactiver cette fonction sur le 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" />

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

Un grand nombre de sites Web professionnels internes sont optimisés pour Internet Explorer 7, de sorte que cette exception par défaut préserve cette compatibilité. ... Encore une fois, si une balise Meta ou un en-tête http est utilisé pour définir un mode de compatibilité pour 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 précis.

L'utilisation d'une balise Meta présente également plusieurs autres problèmes, par exemple ignorer la balise si elle ne se trouve pas directement sous la balise <head> ou s'il y a trop de données avant (4k). Cela peut également déclencher une nouvelle analyse du document dans certaines versions de IE, ce qui ralentira le rendu. Pour en savoir plus sur ces problèmes, consultez l'article MSDN Bonne pratique: obtenez votre HEAD dans l'ordre .

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

Si vous utilisez .net et IIS, vous pouvez ajouter ceci au fichier 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 procéder en php:

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

Tant que l'en-tête X-UA-Compatible est présent avec le doctype html5, un site sera toujours exécuté dans le dernier mode de normalisation.

Désactiver l'affichage de compatibilité
Il peut toujours être utile de désactiver l'affichage de compatibilité. Pour ce faire, décochez Display all intranet sites in compatibility view dans les paramètres de l'affichage de compatibilité.

Compatibility View Settings

Vous pouvez y accéder en appuyant sur alt pour afficher le menu.

enter image description here

Edit Cette réponse concerne également IE9

243
Daniel Little

Cela fonctionne pour moi ..

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

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

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
10
Jeow Li Huan

La méta-tag ne fait rien pour les sites intranet et mon problème était le rendu IE10 en mode de compatibilité IE10. Pour moi, le problème était de prendre réponse de @ Jeow plus loin et d'utiliser cette valeur dans un en-tête http en ajoutant ce qui suit à web.config sous 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 IE, les sites intranet incluent les sites grand public qui ne sont pas acheminés vers un serveur externe. Par exemple, un employé de Stackoverflow travaillant à partir du bureau verrait probablement stackoverflow.com en mode de compatibilité.

2
o.v.

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

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

A utilisé l’exemple exact fourni dans la première case (ajouté le </html> manquant en bas), l’a ouvert dans IE10 et que les normes ont été forcées; bien que.

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

1
ZacNespral21