42 votes

Émule IE7 pour IE8 mais pas pour IE9 avec "X-UA-Compatible"

J'ai un site en fonction de dessin vectoriel, pour internet explorer, je suis à l'aide de VML et pour les autres navigateurs, je suis en utilisant le format SVG. IE8, cependant, ne ont pas de soutien ni sans retomber pour IE7 en mode, qui a VML.

Donc je suis, y compris <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Le problème (et, en fait une bonne chose), c'est que IE9 a maintenant un support pour le format SVG donc je ne veux pas qu'il tombe en arrière à la version IE7 en mode, qui a bien pire performance et de compatibilité. Comment puis-je dire que IE8 pour revenir à la version IE7 en mode mais laissez IE9 séjour dans IE9 en mode.

Droit maintenant, je suis en train de faire un serveur de contrôle de l'agent la possibilité d'inclure le EmulateIE7-chaîne dans la tête ou pas, mais je veux éviter cela autant que possible.

41voto

robocat Points 1567

J'ai juste eu un jeu et trouvé ce qui fonctionne pour moi:

<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" >

C'est avec une virgule, pas un point virgule! Vous pouvez essayer en utilisant cette copie modifiée de Jean Lascurettes page (c'est à dire emological.com).

Je n'ai pas regardé les spec, mais le format est similaire à content="IE=7,chrome=1" qui travaille pour google Chrome Frame. J'ai aussi trouvé que content="IE=7,9" fonctionne mais je soupçonne que ce n'est pas un format correct.

Edit:

Méfiez-vous d'un problème grave si votre page est dans une iframe. Si vous utilisez le ci-dessus dans un encadré de la page où le parent est dans tout mode moins que IE9 strictes, alors IE9 va retomber IE8 en mode (en ignorant l'IE=7 demande!). Toutes les solutions connues sont les bienvenus :)

Le ci-dessus semble être un effet secondaire de la caractéristique de conception, que les iframes (et je présume que les cadres) sont tous dans IE9 mode, ou tous sont à moins de IE9 mode. On ne peut pas mélanger IE9 images avec < IE9 les images, voir la sp #599022 et #635648.

Edit 2:

Attention, IE11 prend uniquement en charge les "IE=edge" (pas IE=11), et que l'utilisation de IE=edge a des effets significatifs sur IE fonctionnalités (y compris l'agent de l'utilisateur).

27voto

squareman Points 379

Le mode double mentionné par quelqu'un d'autre devrait fonctionner (mais ne fonctionne pas comme indiqué par Microsoft) et est la chose la plus proche que j'ai vu dans MS documentation qui doit fonctionner comme décrit. Il y a une mise à jour ci-dessous qui montre la bonne forme de l'attribut meta valeur doit prendre.

Donc, si vous utilisez ce:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

Malheureusement, ce que vous obtiendrez est IE8 rendu comme IE8 en raison de l'floue version de guidage que le x-ua-compatible moteur ne. Voir ce document: La définition de la Compatibilité des documents: la Compréhension du Contenu des Valeurs d'Attribut sur MSDN. Dans cette section, vous allez voir que dans la première moitié, ils définissent une version vectorielle définie comme plus grand que la version actuelle du navigateur sera interprétée comme le plus grand disponible moteur de rendu. Par conséquent, emulateIE9 est traduit vers le bas pour emulateIE8. Stupide.

Puis, dans le même souffle, pratiquement, ils parlent de l'utilisation de plusieurs version vecteurs comme dans l'extrait de code ci-dessus pour exclure un moteur particulier. Mais à cause de l'floue version de la logique, que ça ne marcherait jamais. Ah, Microsoft. Échouer à nouveau.

La raison pour laquelle à l'aide de Csc autour de la méta ne fonctionne pas, c'est que le navigateur doit avoir choisi un moteur de rendu par le temps qu'il frappe un CC. Le x-ua meta doit passer avant toute autre chose dans la tête à l'exception des autres metas ou le titre selon MME propre documentation.

Si quelqu'un peut le deviner, je suis preneuse parce que je suis désespérée à exclure IE8 de soutien, tout en y compris IE9.

MISE À JOUR IMPORTANTE:

Robocat souligne, à l'aide d'une virgule au lieu d'un point-virgule comme Micrsoft montre est la façon correcte de le faire. Je l'ai testé et il a travaillé pour moi. J'ai mis à jour ma page de test.

Donc le corriger formulaire est présent (comme suggéré par robocat):

<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">

Les incorrecte formulaire est présent (comme suggéré par Microsoft):

<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9">

3voto

Deepfreezed Points 283

J'ai jusqu'ici 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, Pourquoi est-il si difficile de prendre en charge des éléments qui, selon vous, devraient fonctionner dans votre documentation? nous devons passer des heures à faire la guerre de navigateur. Vous perdez le temps de tout le monde.

3voto

J F Points 41

Si vous voulez que IE 8 utilise les normes IE7 et 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 les normes IE 9. Pour IE8, cela me donne le mode Navigateur IE8 Mode documentaire Normes IE7

0voto

robocat Points 1567

Je viens de remarquer une page utilisant:

 <meta http-equiv="X-UA-Compatible" content="chrome=1"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
 

alors peut-être que l'utilisation de deux balises méta distinctes pourrait également fonctionner:

 <meta http-equiv="X-UA-Compatible" content="IE=7"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 

Je ne l’ai pas essayé cependant, mais si vous trouvez que cela fonctionne, ajoutez un commentaire à cela et je mettrai à jour la réponse en haut. (A part: j'utilise un commentaire séparé, car même si cela ne fonctionne pas, cela peut être une solution utile pour d'autres situations.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X