Comment cibler uniquement Internet Explorer 10 dans certaines situations telles que le CSS spécifique à Internet Explorer ou le code JavaScript spécifique à Internet Explorer?
J'ai essayé ceci, mais cela ne fonctionne pas:
<!--[if IE 10]> <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
Internet Explorer 10 ignore les commentaires conditionnels et utilise au <html lang="en" class="no-js">
lieu de <html class="no-js ie10" lang="en">
.
@cc_on
déclaration . Donc, pour détecter si IE10 est prise en charge ou non, vous pouvez utiliser le code suivant:<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->
. (J'ai posté ceci en commentaire, car IE est toujours en développement, donc on ne sait pas si la version finale prend également en charge cette fonctionnalité)<script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>
Améliorations: n'a pas besoin de commentaires conditionnels; fonctionne même si la compression / traitement de suppression de commentaires; aucune classe ajoutée pour ie11; fonctionnera avec ie11 fonctionnant en mode de compatibilité ie10; n'a pas besoin de balise de script autonome (peut simplement être ajoutée à d'autres javascript dans head).if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';
- qui résout 90% des problèmes (parfois les modes de compatibilité échouent, auquel cas vous avez besoin d'un autre niveau de correctif en plus de cela).Réponses:
Vous pouvez peut-être essayer un jQuery comme celui-ci:
Pour utiliser cette méthode, vous devez inclure la bibliothèque jQuery Migrate car cette fonction a été supprimée de la bibliothèque jQuery principale.
Cela a très bien fonctionné pour moi. Mais sûrement pas de remplacement pour les commentaires conditionnels!
la source
== '10.0'
pour que cela fonctionnejQuery.browser
n'est plus disponible dans la version actuelle de jQuery (1.9) sans plugin. blog.jquery.com/2013/01/15/…if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here }
Notez la version <10 pour détecter les anciennes versions d'IE. IE10 et supérieur fonctionne bien avec tous mes CSS3, HTML5, jquery, etc.Je n'utiliserais pas JavaScript
navigator.userAgent
ou $ .browser (qui utilisenavigator.userAgent
) car il peut être usurpé.Pour cibler Internet Explorer 9, 10 et 11 (Remarque: également la dernière version de Chrome):
Pour cibler Internet Explorer 10:
Pour cibler Edge Browser:
Sources:
la source
navigator.userAgent
"? La compilation conditionnelle est une fonctionnalité intégrée du runtime JScript, qui ne peut pas être usurpée via la chaîne user-agent.J'ai trouvé une solution sur ce site où quelqu'un avait un commentaire précieux :
La solution est:
Il
la source
if (/*@cc_on!@*/false && document.documentMode === 10) {}
qui contourne les avertissements eval dans les programmes de linting.Internet Explorer 10 ne tente plus de lire les commentaires conditionnels.Cela signifie qu'il traitera les commentaires conditionnels comme n'importe quel autre navigateur: comme des commentaires HTML normaux, censés être entièrement ignorés. En regardant le balisage donné dans la question à titre d'exemple, tous les navigateurs, y compris IE10, ignoreront entièrement les parties de commentaire, surlignées en gris. La norme HTML5 ne fait aucune mention de la syntaxe des commentaires conditionnels, et c'est exactement pourquoi ils ont choisi de ne plus la supporter dans IE10.
Notez cependant que la compilation conditionnelle en JScript est toujours prise en charge, comme indiqué dans les commentaires ainsi que dans les réponses les plus récentes. Cela ne disparaîtra pas non plus dans la version finale, contrairement à
jQuery.browser
. Et bien sûr, il va sans dire que le sniffing user-agent reste aussi fragile que jamais et ne doit en aucun cas être utilisé.Si vous devez vraiment cibler IE10, utilisez la compilation conditionnelle qui pourrait encore bénéficier d'un support dans un proche avenir, ou - si vous pouvez l'aider - utilisez une bibliothèque de détection de fonctionnalités telle que Modernizr au lieu de (ou en conjonction avec) la détection du navigateur. À moins que votre cas d'utilisation ne nécessite noscript ou IE10 accommodant côté serveur, le reniflage de l'agent utilisateur sera plus un casse-tête qu'une option viable.
Cela semble assez lourd, mais rappelez-vous qu'en tant que navigateur moderne hautement conforme aux normes Web actuelles 1 , en supposant que vous ayez écrit un code interopérable hautement conforme aux normes, vous ne devriez pas avoir à mettre de côté un code spécial pour IE10 à moins que cela ne soit absolument nécessaire, c'est-à-dire qu'il est censé ressembler aux autres navigateurs en termes de comportement et de rendu. 2 Et cela semble exagéré, étant donné l'histoire d'IE, mais combien de fois vous êtes-vous attendu à ce que Firefox ou Chrome se comportent de la même manière pour être consternés?
box-sizing
préfixe pendant des annéesSi vous avez une raison légitime de cibler certains navigateurs, n'hésitez pas à les renifler avec les autres outils qui vous sont fournis. Je dis simplement que vous allez avoir beaucoup plus de mal à trouver une telle raison aujourd'hui que ce qu'elle était auparavant, et ce n'est vraiment pas quelque chose sur lequel vous pouvez compter.
1 Non seulement IE10, mais IE9 et même IE8 qui gère la plupart des standards matures CSS2.1 bien mieux que Chrome, simplement parce que IE8 était tellement concentré sur la conformité aux normes (à ce moment-là, CSS2.1 était déjà assez stable avec seulement des différences mineures de la recommandation d'aujourd'hui) alors que Chrome semble être un peu plus qu'une démo technologique à moitié polie de pseudo-normes de pointe.
2 Et je peux être partial quand je dis cela, mais c'est sûr que l'enfer le fait. Si votre code fonctionne dans d'autres navigateurs mais pas dans IE, les chances que ce soit un problème avec votre propre code plutôt qu'avec IE10 sont bien meilleures que, disons, il y a 3 ans, avec les versions précédentes d'IE. Encore une fois, je suis peut-être partial, mais soyons honnêtes: n'est-ce pas vous aussi? Regardez simplement vos commentaires.
la source
<!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]-->
La documentation de support des normes IE est un bon point de départ .
Voici comment cibler IE10 en JavaScript:
Voici comment cibler IE10 en CSS:
Dans le cas où IE11 doit être filtré ou réinitialisé via CSS, voir une autre question: Comment écrire un hack CSS pour IE 11?
la source
Les deux solutions affichées ici (avec de légères modifications) fonctionnent:
ou
Vous incluez l'une des lignes ci-dessus à l'intérieur de la balise head de votre page html avant votre lien css. Et puis dans le fichier css, vous spécifiez vos styles ayant la classe "ie10" comme parent:
Et voilà! - les autres navigateurs restent intacts. Et vous n'avez pas besoin de jQuery. Vous pouvez voir l'exemple comment je l'ai implémenté ici: http://kardash.net .
la source
J'ai écrit un petit plugin JavaScript vanille appelé Layout Engine , qui vous permet de détecter IE 10 (et tous les autres navigateurs), d'une manière simple qui ne peut pas être falsifiée, contrairement au sniffing d'agent utilisateur.
Il ajoute le nom du moteur de rendu en tant que classe sur la balise html et renvoie un objet JavaScript contenant le fournisseur et la version (le cas échéant)
Consultez mon article de blog: http://mattstow.com/layout-engine.html et obtenez le code sur GitHub: https://github.com/stowball/Layout-Engine
la source
J'utilise ce script - il est désuet, mais efficace pour cibler une feuille de style Internet Explorer 10 distincte ou un fichier JavaScript qui n'est inclus que si le navigateur est Internet Explorer 10, de la même manière que vous le feriez avec des commentaires conditionnels. Aucun jQuery ou autre plugin n'est requis.
la source
Vous pouvez utiliser PHP pour ajouter une feuille de style pour IE 10
Comme:
la source
Si vous devez le faire, vous pouvez vérifier la chaîne de l'agent utilisateur dans JavaScript:
Comme d'autres personnes l'ont mentionné, je recommanderais toujours la détection des fonctionnalités à la place.
la source
String.match()
renverra un tableau pour une correspondance ou null si ce n'est pas le cas.!(String.match())
le rend faux pour une correspondance ou vrai pour aucune correspondance.!(!(String.match()))
le rend vrai pour une correspondance ou faux pour aucune correspondance.!(!(something))
ou tout simplement!!something
convertit donc n'importe quoi en un booléen vrai / faux. stackoverflow.com/questions/784929/…boolean
valeur intrinsèque , par exemplevar name = 'me', hasName = !!name;
.Si vous souhaitez cibler IE 10 avec Vanilla JavaScript, vous pouvez essayer la détection des propriétés CSS:
Propriétés CSS
Au lieu de cela,
msTouchAction
vous pouvez également utiliser l'une de ces propriétés CSS, car elles ne sont actuellement disponibles que dans IE 10. Mais cela pourrait changer à l'avenir.Page de test
J'ai mis en place une page de test avec toutes les propriétés sur CodePen.
la source
clipBoardData est une fonction qui n'est disponible que dans IE, donc si vous cherchez à cibler toutes les versions d'IE, vous pouvez utiliser
la source
CSS pour IE10 + et IE9
la source
Vous pouvez utiliser la détection des fonctionnalités pour voir si le navigateur est IE10 ou supérieur comme ceci:
Seulement vrai si> IE9
la source
Conditionizr (voir la documentation) ajoutera des classes CSS de navigateur à votre élément html, y compris ie10.
la source
Avec JavaScript:
Travaillez pour tous IE.
Alors changez
/Trident/g
par/Trident/x.0/g
oùx = 4, 5, 6
ou7
(ou peut-être8
pour l'avenir).la source
Je voulais juste ajouter ma version de la détection IE. Il est basé sur un extrait trouvé à http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ code et étendu pour prendre également en charge ie10 et ie11. Il détecte IE 5 à 11.
Tout ce que vous avez à faire est de l'ajouter quelque part et vous pouvez toujours vérifier avec une condition simple. La variable globale
isIE
ne sera pas définie si ce n'est pas un IE, sinon ce sera le numéro de version. Ainsi, vous pouvez facilement ajouter des éléments similairesif (isIE && isIE < 10)
ou similaires.la source
Pour moi, le code suivant fonctionne correctement, tous les commentaires conditionnels fonctionnent dans toutes les versions d'IE:
Je suis sous Windows 8.1, je ne sais pas si cela est lié à la mise à jour ie11 ...
la source
(gt IE 11)
bit est complètement inutile. Vous pouvez aussi bien le faire à la<!--[if !(IE)]<!-->
place.Voici comment faire du CSS personnalisé pour Internet Explorer:
Dans mon fichier JavaScript:
Et puis dans mon fichier CSS, vous définissez chaque style différent:
la source
Consultez http://suhasrathod.wordpress.com/2013/04/29/ie10-css-hacks/
la source
utiliser babel ou dactylographié pour convertir ce code js
la source
Cette réponse m'a conduit à 90% du chemin. J'ai trouvé le reste de ma réponse sur le site de Microsoft ici .
Le code ci-dessous est ce que j'utilise pour tout cibler, c'est-à-dire en ajoutant une classe .ie à
<html>
Utilisez jQuery (qui a désapprouvé .browser en faveur des agents utilisateurs dans la version 1.9+, voir http://api.jquery.com/jQuery.browser/ ) pour ajouter une classe .ie:
la source
Si cela ne vous dérange pas de cibler les navigateurs IE10 et supérieurs et non IE, vous pouvez utiliser ce commentaire conditionnel:
Dérivé de http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither
la source
Si vous devez vraiment le faire, vous pouvez faire fonctionner les commentaires conditionnels en ajoutant la ligne suivante à
<head>
:La source
la source
solution moderne pour css
la source