web-dev-qa-db-fra.com

IE9 utilise constamment le mode de document standard IE7, peu importe ce que j'essaie

Cela me rend fou.

Peu importe ce que j'essaie, Internet Explorer bascule vers le mode de document standard IE7. J'ai essayé de supprimer totalement mon code pour essayer de le faire se comporter, en utilisant la plaque de fermeture HTML5 et la réinitialisation HTML5 (dont le propre site passe en mode Quirks).

J'ai également ajouté la balise méta qui est supposée forcer IE à sa dernière version, quoi qu'il en soit, mais tout ce qui a été fait rend ma balise invalide selon le W3C.

C'est ce que j'ai Qu'est-ce que je rate?

<!doctype html>

<!--[if IE 7 ]> <html class="ie7> <![endif]-->
<!--[if IE 8 ]> <html class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <title></title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <p>Test text</p>        
</body>
</html>

MODIFIER

J'ai une solution trouvée via une suggestion ci-dessous. La suggestion n'a pas fonctionné, mais elle m'a amené à une réponse. Cela pourrait ne pas convenir à 100% à tout le monde, car cela impose une classe à la balise body plutôt que html, mais cela fonctionne pour moi et semble fonctionner pour IE.

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>        
</body>
</html>
21
Alan Shortis

J'ai une solution trouvée via une suggestion antérieure. La suggestion n'a pas fonctionné, mais elle m'a amené à une réponse. Cela pourrait ne pas convenir à 100% à tout le monde, car cela impose une classe à la balise body plutôt que html, mais cela fonctionne pour moi et semble fonctionner pour IE.

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>        
</body>
</html>

MODIFIER

En fait, j'ai arrêté d'utiliser ce qui précède et maintenant j'ajoute mes classes spécifiques IE à l'élément html, comme suggéré dans HTML5BP.

Notez également que vous voudrez peut-être supprimer chrome=1 de la méta-tag, car Chrome Frame sera bientôt détruit. Pas de mal à le garder bien que pour les rares cas où quelqu'un l'utilise encore bien.

Une autre chose à vérifier qui, à mon avis, n'a pas été mentionnée est l'état de ce qui est probablement le paramètre le plus irritant dans IE - 'Afficher les sites intranet en mode d'affichage de compatibilité'. Si vous exécutez un serveur de test avec un nom tel que http://mytestserver:8888 IE, vous penserez qu'il s'agit d'un site intranet et que vous changez de mode indépendamment de ce que vous faites dans la tête de votre document.

Ce paramètre est activé dans la stratégie de groupe de mon entreprise car notre ancien intranet de points de partage en dépend réellement. Parfait pour la vieille merde, mais terrible pour le nouveau matériel qui va réellement respecter les normes.

Désactivez-le dans Tools > Compatibility View Settings et soyez prêt à le basculer manuellement si vous avez des sites hérités.

10
Alan Shortis

de ce fil

La méta-balise compatible X-UA doit apparaître juste après le titre dans l'élément. Aucune autre balise méta, lien css et appel de scripts js ne peut être placé avant.

10
Anoop

Parfois, IE se comporte très mal sur les sites intranet, les forçant en mode de compatibilité, quelle que soit la ligne <meta> située en tête. Cependant, vous pouvez faire en sorte que le serveur envoie un en-tête à Brute-force IE pour se comporter en ajoutant ce qui suit à la configuration Web:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=Edge" />
      </customHeaders>
    </httpProtocol>
</system.webServer>
8
st3inn
3
Stuart

Garder le 

<!doctype html>

pour être la première ligne de la source de la page, et la balise méta compatible X-UA doit être adjacente à la balise tilte de la balise tilte.

<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
3
dorian

J'avais également ce problème avec ie10 forçant le mode standard IE7 pour les sites sur localhost. L'ajout/l'utilisation d'un virtualhost incluant un point dans son nom (local.x) a résolu le problème.

2
Semra

J'ai utilisé les éléments suivants pour résoudre ce problème lorsque IE8 effectuait le rendu en mode de document Normes IE7 malgré tout ce que j'avais essayé. Ajoutez ceci juste avant la déclaration de doctype:

<!--[if IE ]><![endif]-->

Donc, le HTML résultant ressemblerait à quelque chose comme ceci:

<!--[if IE ]><![endif]-->
<!doctype html>
<!--[if IE 7]><html class="lt-ie8"><![endif]-->
<!--[if IE 8]><html class="lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
<head>
    <title>Page title here</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

Quelqu'un d'autre devra commenter pourquoi cela semble fonctionner - c'est un mystère pour moi.

0
Shawn

Le lien que Stuart a posté a fonctionné pour moi car il concernait le site Web local configuré pour le mode de compatibilité. Une fois le site Web intranet supprimé de la liste des modes de compatibilité, la page est passée au mode IE = 9 approprié, en fonction de la balise META.

0
Chad Miller