J'ai un site Web en fonction du dessin vectoriel. Pour Internet Explorer, j'utilise VML et pour d'autres navigateurs, j'utilise SVG . Cependant, IE8 ne prend pas en charge pour ni sans revenir en arrière à IE7-mode qui a VML.
Par conséquent, j'inclus <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
.
Le problème (enfin, c’est une bonne chose), c’est que IE9 prend maintenant en charge le format SVG, je ne veux donc pas qu’il retombe en mode IE7, dont les performances et la compatibilité sont bien pires. Comment puis-je dire à IE8 seul de revenir en mode IE7 tout en laissant IE9 rester en mode IE9?
À l'heure actuelle, je vérifie si l'agent doit inclure la chaîne EmulateIE7 dans la tête ou non, mais je veux éviter cela autant que possible.
Je viens d'avoir une pièce et j'ai trouvé les œuvres suivantes:
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" >
C'est avec une virgule, pas un point-virgule!
Je n'ai pas examiné les spécifications, mais le format est similaire à content = "IE = 7, chrome = 1", ce qui fonctionne pour Chrome Frame. J'ai aussi constaté que content = "IE = 7,9" fonctionnait mais je soupçonne que ce n'est pas un format correct.
Modifier:
Méfiez-vous des problèmes sérieux si votre page se trouve dans un iframe. Si vous utilisez ce qui précède dans une page encadrée où le parent est en mode any inférieur à IE9 strict, alors IE9 basculera en mode IE8 (en ignorant la requête IE = 7!). Toutes les solutions de contournement connues sont les bienvenues :) Ne sera peut-être pas pertinent pour IE11.
Ce qui précède semble être l’un des effets secondaires de la caractéristique de conception intrinsèque, à savoir que les iframes (et les images présumées) sont tous en mode IE9 ou sont tous inférieurs au mode IE9. On ne peut jamais mélanger des cadres IE9 avec des cadres <IE9, voir MS issues # 599022 et # 635648 .
Edit 2:
Notez que IE11 ne prend en charge que "IE = Edge" (pas IE = 11) et que l'utilisation de IE = Edge a des effets importants sur la fonctionnalité IE (y compris l'agent utilisateur).
Edit 3:
IE=Edge
est pris en charge par IE8 à IE11.Edit 4:
X-UA-Compatible
a été supprimé du navigateur Microsoft Edge. Seul Internet Explorer dispose des modes de compatibilité. Attention, si vous utilisez WebView dans une application sous Windows Phone 10, vous utilisez toujours IE11 (et non pas Edge).
De plus, pour diverses raisons, vous ne pouvez pas faire confiance à l'agent utilisateur pour vous indiquer le niveau de compatibilité approprié, utilisez plutôt document.documentMode
à partir de JavaScript.
Le mode double mentionné par quelqu'un d'autre devrait fonctionne (mais ne fonctionne pas comme le montre Microsoft) et constitue la chose la plus proche que j'ai vue dans la documentation MS qui devrait fonctionner comme décrit. Une mise à jour ci-dessous montre la forme que devrait prendre la valeur du méta-attribut.
Donc si vous utilisez ceci:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">
Malheureusement, vous obtiendrez un rendu IE8 en tant que IE8 en raison de la vectorisation floue de la version effectuée par le moteur compatible x-ua. Voir ce document: Définition de la compatibilité des documents: Comprendre les valeurs des attributs de contenu sur MSDN. Dans cette section, vous verrez que dans la première moitié, ils définissent tout vecteur de version défini comme étant plus grand que la version actuelle du navigateur sera interprété comme le plus grand moteur de rendu disponible. Par conséquent, emulateIE9 est traduit en imulateIE8. Stupide.
Ensuite, dans le même souffle, ils parlent d'utiliser plusieurs vecteurs de version, comme dans l'extrait de code ci-dessus, pour exclure un moteur particulier. Mais à cause de la logique de version floue, cela ne fonctionnerait jamais. Ah, Microsoft. Échouer à nouveau.
La raison pour laquelle utiliser des CC autour de la méta ne fonctionnera pas, c'est que le navigateur doit avoir choisi un moteur de rendu au moment où il rencontre un CC. La méta x-ua doit précéder tout ce qui figure dans l'en-tête, à l'exception des autres métas ou du titre, selon la propre documentation de MS.
Si quelqu'un peut comprendre cela, je suis tout ouïe parce que je suis désespéré d'exclure IE8 du support tout en incluant IE9.
MISE À JOUR IMPORTANTE:
Robocat indique que la bonne façon de procéder consiste à utiliser une virgule au lieu d'un point-virgule, comme le montre Micrsoft. Je l'ai testé et cela a fonctionné pour moi. J'ai mis à jour ma page de test .
Donc, la forme correct est la suivante (comme suggéré par robocat):
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">
Le formulaire incorrect est le suivant (comme suggéré par Microsoft):
<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9">
Si vous voulez que IE 8 utilise les normes IE7 et que IE 9 utilise les normes IE9, celle-ci a fonctionné pour moi:
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">
Pour IE9, cela me donne le mode de compatibilité IE 9 avec IE 9 normes . Pour IE8, cela me donne le mode Navigateur IE8 Mode de document Mode IE
J'ai jusqu'à présent utilisé tout cela, rien ne fonctionne sur IE9:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
<meta http-equiv="X-UA-Compatible" content="IE=8" >
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=EmulateIE8" />
</customHeaders>
</httpProtocol>
c'est tellement frustrant, aucune de ces balises méta ne semble fonctionner. Microsoft, Qu'est-ce qui est si difficile à prendre en charge, cela devrait fonctionner dans votre documentation nous devons passer des heures à faire la guerre de navigateur. Vous perdez le temps de tout le monde.
Celui-ci fonctionne pour IE9 pour moi.
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>