web-dev-qa-db-fra.com

SI IE les conditions ne fonctionnent pas

Je me suis rendu fou en essayant de faire fonctionner les conditions conditionnelles et je n'ai pas de chance. Quelqu'un peut-il expliquer ce que je fais mal?

Voici mon code:

        <!--[if IE 10]>
            IE IS VERSION 10<br />
        <![endif]-->
        <!--[if !IE]><!-->
            Browser is not IE
        <!--<![endif]-->
        <!--[if lt IE 9]>
            IE IS LESS THAN VERSION 9<br />
        <![endif]-->

Ce qui se passe est frustrant et incohérent. Lorsque je charge la page avec le code ci-dessus dans IE8 il obtient le message "IE IS MOINS QUE LA VERSION 9" Très bien, non? parce que quand je charge la même page dans IE1 je reçois le message "Le navigateur n'est pas IE"

Pourquoi pense-t-il qu'IE10 n'est pas un navigateur IE?! J'ai exploré page après page mais il ne semble pas y avoir de problème avec mon code par rapport à ce que j'ai trouvé .

22
TheSnooker

Solution CSS:

Si vous souhaitez appliquer uniquement la base CSS sur le navigateur, vous pouvez essayer:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* Put your IE-only styles here. Works for IS 10 & IE 11*/
}

Solution JavaScript:

IE 10 ne prend pas en charge les instructions conditionnelles.

Instructions conditionnelles dans Internet Explorer 10. . Il traitera les commentaires conditionnels comme des commentaires HTML normaux et sera entièrement ignoré.

Utilisez une bibliothèque de détection de fonctionnalités telle que Modernizr au lieu de la détection du navigateur.

trouvé une solution sur web impressionnants dans ce commentaire :

Voici la démo à tester

La solution est:

if (Function('/*@cc_on return document.documentMode===10@*/')()) {
    alert('IE 10');
} else {
    alert('Not IE 10');
}

Il

  • n'a pas besoin de commentaires conditionnels;
  • fonctionne même si le commentaire supprime la compression/traitement;
  • aucune classe ie10 ajoutée dans Internet Explorer 11;
  • plus susceptibles de fonctionner comme prévu avec Internet Explorer 11 exécuté en mode de compatibilité Internet Explorer 10;
  • n'a pas besoin d'une balise de script autonome (peut simplement être ajoutée à un autre code JavaScript dans la tête).
  • n'a pas besoin de jQuery pour tester
19
Zaheer Ahmed

Je suis surpris que personne n'ait ajouté de solution uniquement CSS. Si vous souhaitez simplement utiliser css, utilisez une instruction comme celle-ci:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* Put your IE-only styles here. Works for IS 10 & IE 11*/
}

De cette façon, vous n'avez pas à vous fier à jquery ou à tout balisage html. Il suffit de le poster dans le css et vous êtes prêt à partir.

Maintenant, c'est un hack? Probable. Cela dépend de l'utilisation de la balise à contraste élevé de Microsoft, mais comme aucun autre navigateur n'utilise la balise ms, vous devriez être prêt à partir.

Enfin, consultez ces pages pour plus d'informations:

Article de blog

MS Site sur la balise de contraste

22
Maximus

IE 10, 11 et vers le haut ne prend plus en charge les commentaires conditionnels.

Voir cette réponse: https://stackoverflow.com/a/22187600/1498739

3
abiNerd

IE 10 a supprimé les commentaires conditionnels.

Vous pouvez faire quelque chose de similaire en javascript comme ceci:

if ($.browser.msie && $.browser.version === 10) {
    // stuff here (like adding an IE10 class to the body or html tag
}
0
sclarson

Essayez d'ajouter la balise META suivante en haut de la page pour activer le comportement d'Internet Explorer 9:

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

En effet, les commentaires conditionnels ont été supprimés dans les modes Internet Explorer 10 et les modes excentriques pour une meilleure interopérabilité et conformité avec HTML5. Cela signifie que les commentaires conditionnels sont désormais traités comme des commentaires réguliers, comme dans les autres navigateurs. Cette modification peut avoir une incidence sur les pages écrites exclusivement pour Windows Internet Explorer ou les pages qui utilisent le reniflement du navigateur pour modifier leur comportement dans Internet Explorer.

0
Ian