160 votes

Comment pour cibler seulement Internet Explorer 10 pour certaines situations comme code spécifiques à Internet Explorer CSS ou JavaScript spécifique à Internet Explorer ?

Comment pour cibler seulement Internet Explorer 10 pour certaines situations comme code spécifiques à Internet Explorer CSS ou JavaScript spécifique à Internet Explorer ?

J’ai essayé, mais il ne fonctionne pas :

Internet Explorer 10 ignore les commentaires conditionnels et utilise le au lieu de .

132voto

Roni Points 1628

Je ne voudrais pas utiliser JavaScript ou [$.browser](http://api.jquery.com/jquery.browser/#jQuery-browser1) (qui utilise ) car il peut être usurpée.

Cette solution CSS ciblera Internet Explorer 9, 10 et 11 :

Pénétrant de blocs @media CSS spécifique d’Internet Explorer

111voto

Willem de Wit Points 2649

J'ai trouvé une solution sur ce site où quelqu'un a eu un précieux commentaire:

La solution est:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

Il

  • n'a pas besoin de commentaires conditionnels;
  • fonctionne même si le commentaire de décapage de compression/traitement;
  • pas de ie10 classe ajoutée dans Internet Explorer 11;
  • plus susceptibles de fonctionner comme prévu avec Internet Explorer 11 dans Internet Explorer 10 mode de compatibilité;
  • n'a pas besoin autonome balise de script (peut-être simplement ajoutés à du code JavaScript dans le head).
  • n'a pas besoin de jQuery pour tester

65voto

Max Sohrt Points 598

Peut-être vous pouvez essayer certains jQuery comme ceci :

Pour utiliser cette méthode, vous devez inclure la bibliothèque de migrer de jQuery parce que cette fonction a été retirée de la bibliothèque jQuery principal.

Tout a bien fonctionné pour moi. Mais sûrement pas de remplacement pour les commentaires conditionnels !

63voto

BoltClock Points 249668

Internet Explorer 10 ne vise pas à lire les commentaires conditionnels plus. Cela signifie qu'il va traiter les commentaires conditionnels juste comme n'importe quel autre navigateur: HTML ordinaire, commentaires, destiné à être ignoré complètement. En regardant le balisage donné dans la question comme un exemple, tous les navigateurs y compris IE10 ignore les commentaires des parties, a souligné de gris, entièrement.

Notez, cependant, que la compilation conditionnelle dans JScript est toujours pris en charge, comme indiqué dans les commentaires ainsi que la plus récente des réponses. Il ne va pas loin dans la version finale soit, contrairement à jQuery.browser. Et bien sûr, il va sans dire que l'utilisateur de l'agent sniffing reste aussi fragile que jamais et ne doit jamais être utilisé en toutes circonstances.

Si vous devez vraiment la cible IE10, soit utiliser la compilation conditionnelle qui peut encore voir dans un avenir proche, ou - mieux encore - utilisation d'une fonction de détection de la bibliothèque comme Modernizr au lieu de la détection de navigateur. Sons assez encombrant, mais rappelez-vous que comme un navigateur moderne qui est très conforme à aujourd'hui, les standards du Web1, en supposant que vous avez écrit interopérables code qui est très conforme aux normes, vous ne devriez pas avoir à mettre de côté le code spécial pour IE10, sauf si absolument nécessaire, c'est à dire qu'il est censé ressembler à d'autres navigateurs en termes de comportement et de rendu.2 Et il semble exagéré, étant donné IE de l'histoire, mais combien de fois avez-vous prévu de Firefox ou de Chrome à se comporter de la même manière que pour être accueillie avec surprise?

Si vous ne avez une raison légitime de cibler certains navigateurs, par tous les moyens d'utiliser les alternatives qui existent. Je dis juste que vous êtes va être beaucoup plus difficile de trouver une raison aujourd'hui que ce qu'il utilisé pour être, et c'est vraiment pas juste quelque chose que vous pouvez compter sur.


1Non seulement IE10, mais IE9, et même IE8 qui gère la plupart de la maturité CSS2.1 norme bien mieux que Chrome, tout simplement parce que IE8 était tellement concentré sur le respect des normes (CSS2.1 a déjà été assez stable, avec seulement des différences mineures de la recommandation faite aujourd'hui), tandis que Chrome semble être un peu plus qu'un demi-poli tech démo de pointe pseudo-normes.

2Et je suis peut-être biaisé quand je dis cela, mais c'est sûr que l'enfer ne. Si votre code fonctionne dans d'autres navigateurs mais pas IE, les chances que c'est un problème avec votre propre code plutôt que IE10 sont beaucoup mieux par rapport à, disons, il y a 3 ans, avec les précédentes versions d'IE. Encore une fois, je suis peut-être biaisé, mais avouons-le: n'êtes-vous pas trop? Il suffit de regarder à vos commentaires.

36voto

Paul Sweatte Points 8668

Un bon endroit pour commencer est la IE Normes de la Documentation d'Appui.

Voici comment faire pour cible IE10 en JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Voici comment faire pour cible IE10 dans le CSS:

@media all and (-ms-high-contrast: none) {
...
}

En cas IE11 doit être filtré via CSS, voir un autre question: Comment écrire un CSS hack pour IE 11?

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