Détecter la version de IE (avant v9) en JavaScript
Je veux rebondir les utilisateurs de notre site web à une page d'erreur si ils utilisent une version de Internet Explorer
avant v9. C'est juste pas la peine de notre temps et de l'argent pour soutenir IE pre-v9
. Les utilisateurs de tous les autres non-IE navigateurs sont très bien et ne devrait pas être sans provision. Voici le code proposé:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
//navigate to error page
}
}
Sera présent code faire l'affaire?
À la tête de quelques commentaires qui seront probablement à venir à ma façon:
- Oui, je sais que les utilisateurs puissent se forger leur
useragent
chaîne. Je ne suis pas concerné. - Oui, je sais que la programmation des pros préfèrent flairer la fonction de soutien au lieu de navigateur-type, mais je ne ressens pas cette approche a du sens dans ce cas. Je sais déjà que tous (les) non-IE des navigateurs prennent en charge les fonctionnalités dont j'ai besoin et que tous les
pre-v9 IE
les navigateurs ne le font pas. Vérification de la fonctionnalité par fonctionnalité sur tout le site serait un gaspillage. - Oui, je sais que quelqu'un essaie d'accéder au site en utilisant
IE v1
(ou >= 20) ne serait pas obtenir 'badBrowser' la valeur true et que la page d'avertissement de ne pas être affichées correctement. C'est un risque que nous sommes prêts à prendre. - Oui, je sais que Microsoft a "commentaires conditionnels" qui peut être utilisé pour préciser la version du navigateur de détection. IE ne supporte plus les commentaires conditionnels comme de
IE 10
, ce qui rend cette approche tout à fait inutile.
Tout autre problème évident d'être au courant?
- "C'est juste pas la peine de notre temps et de l'argent pour soutenir IE pré-v9". Je souhaite que je pourrais le faire.
- Fondé sur le point [2] je ne vais pas suggérer Modernizr (en.wikipedia.org/wiki/Modernizr) - tout le monde a tracer une ligne dans le sable quelque part - mais IE9 semble comme une ligne haute
- Nous avons un petit auditoire captif. Pratiquement tous les utilisateurs utilisent décent navigateurs à l'exception de quelques WinXP gars qui ne sont pas admissibles à la mise à niveau vers IE9. Ce sont les mecs qui je suis ciblage avec ce message d'erreur.
- Une idée intéressante. Donc, à l'aide de "commentaires conditionnels" dans IE 10 ne cause pas de IE10 pour étouffer? Il va juste être ignoré? Si oui, alors ce que vous dites fait beaucoup de sens.
- Les commentaires conditionnels sont juste des commentaires. Seul IE interprète comme des particuliers. IE10+ ne le fais plus.
- Les commentaires conditionnels seront traités exactement de la même façon par IE 10 en tant que non-IE navigateurs. Ils sont valides HTML commentaires seront traités comme tels. Je suis d'accord avec Andreas et pense que les commentaires conditionnels est le chemin à parcourir.
- La documentation officielle qui dit que IE10+ ne sont pas compatibles avec les commentaires conditionnels: blogs.msdn.com/b/ie/archive/2011/07/06/... - Grâce à: stackoverflow.com/a/9900331/320399
- La réponse sélectionnée est incorrecte et ne marche pas pour ie11. voir ma réponse
- Qui se soucie si IE10 prend en charge les commentaires conditionnels si ce n'est pas l'un des navigateurs que vous essayez de détecter? Vous n'avez pas besoin de détecter si c'est IE 9 ou supérieur, vous avez seulement besoin de détecter si c'est IE8 ou moins. Votre erreur est de penser que vous avez besoin de comprendre ce que c'est dans le but de comprendre ce que ça ne l'est pas. Ce n'est pas vrai. Vous n'avez pas besoin de détecter IE10, vous avez seulement besoin de savoir que ce n'est PAS IE8 (ou inférieur). Tout code que vous mettez dans un
lt IE 9
conditionnelle sera exécuté dans IE8 et ci-dessous et nulle part ailleurs. Aussi simple que cela. C'est la seule chose que Microsoft n'a droit avec IE. - Seulement deux mois de plus avant que nous puissions danser sur IE8 est grave... j'espère que c'est juste quelques années avant que nous puissions tous fossé IE prise en charge...
Vous devez vous connecter pour publier un commentaire.
C'est ma façon préférée de le faire. Il offre un maximum de contrôle. (Remarque: les instructions Conditionnelles ne sont pris en charge dans IE5 - 9.)
D'abord configurer votre ie classes correctement
Alors vous pouvez simplement utiliser CSS pour faire style exceptions, ou, si vous le souhaitez, vous pouvez ajouter un peu de JavaScript simple:
Grâce à Paul Irish.
Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
Retour version de IE ou si pas IE return false
Exemple:
ou
ou
"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
if (isIE () && isIE () < 9) {
Si personne d'autre a ajouté une
addEventLister
-méthode et que vous utilisez le bon mode navigateur, alors vous pouvez le vérifier IE 8 ou moins, avecHéritage Internet Explorer et attachEvent (MDN)
Utiliser les commentaires conditionnels. Vous essayez de détecter les utilisateurs de IE < 9 et les commentaires conditionnels travailleront dans ces navigateurs; dans d'autres navigateurs (IE >= 10 et non-IE), les commentaires seront traités comme normale commentaires HTML, qui est ce qu'ils sont.
Exemple HTML:
Vous pouvez également le faire uniquement avec des script, si vous avez besoin de:
Pour détecter MSIE (v6 - v7 - v8 - v9 - v10 - v11) facilement :
Ici est la façon dont AngularJS vérifie pour IE
Fiable filtre IE8 et plus, la vérification des objets globaux peut être utilisé:
Cette fonction retourne le IE numéro de version majeure comme un entier, ou
undefined
si le navigateur n'est pas Internet Explorer. Cela, comme tout agent utilisateur des solutions, est suceptible d'utilisateur de l'usurpation d'agent (qui a été un dispositif officiel de l'ei depuis la version 8).console.log(!!match && parseInt(match[1]))
,console.log(parseInt(match[1]))
etconsole.log(match)
, mais pas de résultat avec l'un d'eux.getIEVersion()
. Par exemple:if (getIEVersion() < 9) {/* IE 8 or below */}
if (!getIEVersion()) {/* Not IE */}
La détection de la version de IE à l'aide de la fonctionnalité de détection (IE6+, navigateurs avant IE6 sont détectés comme 6, renvoie la valeur null pour les non-IE navigateurs):
Edit: j'ai créé une charmille/mnp repo pour votre confort: ie-version
Mise à jour:
une version plus compacte peut être écrite sur une seule ligne comme:
Détecter IE en JS en utilisant les commentaires conditionnels
Cela fonctionne pour moi. Je l'utilise comme une redirection vers une page qui explique pourquoi nous n'aimons pas les < IE9 et fournir des liens vers les navigateurs que nous préférons.
Votre code peut faire le vérifier, mais comme vous avez pensé, si quelqu'un tente d'accéder à votre page en utilisant IE v1 ou > v19 ne sera pas obtenir de l'erreur, donc peut-être plus sûre de faire le chèque avec la Regex expression comme ce code ci-dessous:
Commentaires conditionnels ne sont plus pris en charge dans IE à partir de la Version 10 comme indiqué sur la Microsoft page de référence.
JS:
alors utiliser:
version 11
EDIT: Ce code est INCROYABLE! haha, il donne un objet avec tout à l'intérieur. Version 11 mais docModeIR est égal à 9. Merci!Pour ie 10 et 11:
Vous pouvez utiliser js et ajouter une classe dans le html pour le maintien de la norme de les commentaires conditionnels:
Ou utiliser une lib comme bowser:
https://github.com/ded/bowser
Ou modernizr pour la détection de fonctionnalité:
http://modernizr.com/
Pour détecter Internet Explorer 10 et 11, vous pouvez utiliser ce petit script immédiatement après la balise body:
Dans mon cas, j'ai utiliser la bibliothèque jQuery est chargé dans la tête.
Ce qui a été répondu à mort, mais c'est tout ce dont vous avez besoin.
false
sur IE11...Selon Microsoft, à la suite est la meilleure solution, il est également très simple:
Je vais vous recommandons de ne pas réécrire ce code pour la énième fois. Je vous recommande d'utiliser le Conditionizr bibliothèque ( http://conditionizr.com/ ), qui est capable de tests spécifiques pour les versions IE ainsi que d'autres navigateurs, systèmes d'exploitation, et même la présence ou l'absence de la Rétine affiche.
Inclure le code uniquement pour les tests dont vous avez besoin et vous obtenez également l'avantage d'une testé la bibliothèque qui a été à travers de nombreuses itérations (et qui serait facile à mettre à jour sans casser votre code).
Il a également mailles bien avec Modernizr qui permet de traiter tous les cas où vous êtes mieux de test pour une capacité spécifique plutôt que d'un navigateur spécifique.
Je fais comme ça:
Cette approche pour la détection IE combine les points forts et évite les faiblesses de jKey de la réponse à l'aide de commentaires conditionnels et Owen réponse de l'utilisateur en utilisant des agents.
Owen approche ne peut échouer sur IE 5 & 6 (7 rapports) et est sensible à l'UA d'usurpation d'identité, mais il peut détecter les versions IE >= 10 (qui inclut désormais des 12, qui est postérieure à Owen de réponse).
Ceci peut être utilisé pour définir les classes utiles à votre document contenant la version de IE:
Noter qu'il détecte le mode de compatibilité être utilisé, si IE est en mode de compatibilité. Notez également que la version de IE est surtout utile pour les versions plus anciennes (<10); les versions supérieures sont plus conformes aux normes et il est probablement mieux au lieu de vérifier les fonctionnalités en utilisant quelque chose comme modernizr.js.
J'ai fait une pratique de soulignement mixin pour cela.
JS:
HTML:
ou tout simplement
Le plus complet du JS script que j'ai trouvé pour vérifier les versions d'IE est http://www.pinlady.net/PluginDetect/IE/. L'ensemble de la bibliothèque est à http://www.pinlady.net/PluginDetect/Browsers/.
Avec IE10, les instructions conditionnelles sont plus pris en charge.
Avec IE11, l'agent de l'utilisateur ne contient plus de MSIE. Aussi, à l'aide de l'agent utilisateur n'est pas fiable parce que cela peut être modifié.
À l'aide de la PluginDetect JS script, vous pouvez détecter pour IE et de détecter les versions exactes en utilisant très spécifique et très bien conçue code qui cible spécifiquement les versions IE. Ceci est très utile lorsque vous vous souciez exactement quelle version de navigateur que vous travaillez avec.
Je me rends compte que je suis un peu en retard à la fête ici, mais j'avais été vérifier sur une simple ligne de façon à fournir des commentaires sur l'opportunité d'un navigateur est IE et quelle version de 10 descente. Je n'ai pas codé ce pour la version 11, donc peut-être un peu de modification sera nécessaire pour cela.
Cependant, c'est le code, il fonctionne comme un objet qui a une propriété et une méthode et s'appuie sur la détection d'objet plutôt que de le raclage de l'objet navigator (qui est massivement des lacunes, car il peut être usurpée).
L'utilisation est
isIE.browser
une propriété qui retourne un booléen et s'appuie sur les commentaires conditionnels de la méthodeisIE.detectedVersion()
qui renvoie un nombre entre 5 et 10. Je fais l'hypothèse que tout ce qui est inférieur à 6, et vous êtes sérieux old school territoire et vous aurez quelque chose de plus costaud qu'une seule ligne et de tout ce qui dépasse 10 et vous êtes dans de nouveaux territoires. J'ai lu quelque chose à propos de IE11 en ne soutenant pas les commentaires conditionnels, mais je n'ai pas une enquête, c'est peut-être pour une date ultérieure.De toute façon, comme il est, et pour une seule ligne, il couvrira les bases de navigateur IE et la détection de la version. Il est loin d'être parfait, mais il est petit et facilement modifié.
Juste pour la référence, et si quelqu'un a un doute sur la façon de mettre en œuvre ce la conditionnels suivants devraient vous aider.
La détection d'IE et de ses versions ne pouvait pas être plus facile, et tous vous avez besoin est un peu de natif/vanille Javascript:
C'est une façon de l'utiliser:
.
Fonctionne dans toutes les versions IE, y compris les versions supérieures, dans le bas-Compatibilité Affichage/Mode, et
documentMode
est IE propriétaire.Si vous avez besoin de delect IE version du Navigateur, alors vous pouvez suivre ci-dessous de code. Ce code fonctionne bien pour la version IE6 à IE11
Fenêtre s'exécute IE10 sera automatiquement mise à jour à IE11+ et seront normalisés W3C
Aujourd'hui, nous n'avons pas besoin de soutien IE8-
Ci-dessous codepen identifie la version de IE dans tous les cas (IE<=9, IE10, IE11 et IE/Edge)
ref: https://codepen.io/gapcode/pen/vEJNZN
Ne pas trop compliquer des choses simples. Il suffit d'utiliser un simple et JScript commentaire conditionnel. Il est le plus rapide, car cela ajoute à zéro code de non-IE navigateurs pour la détection, et il a compatibilité datant de versions d'IE avant de HTML les commentaires conditionnels ont été pris en charge. En bref,
Méfiez-vous des minifiers: la plupart (si pas tous) sera l'erreur de l'spéciale commentaire conditionnel pour un commentaire, et le supprimer
Fondamentalement, puis au-dessus de code définit la valeur de IE_version à la version d'internet explorer que vous utilisez, ou -1 si vous n'êtes pas en utilisant IE. Une démonstration en direct:
JS:
Cela fonctionne sur la base du fait que les commentaires ne sont visibles que dans les anciennes versions d'Internet Explorer, et IE ensembles
@_jscript_version
à la version du navigateur. Par exemple, si vous utilisez Internet Explorer 7, puis@_jscript_version
sera mis à7
, ainsi, la postprocessed javascript qui sera exécutée en fait ressembler à ceci:qui obtient évalué à 7.
Il m'a aidé à
Vérifier ici ==>
En savoir plus sur navigateur navigator
https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator
À L'Aide De JQuery:
http://tanalin.com/en/articles/ie-version-js/
À L'Aide De C#:
Solution Simple arrêter de penser navigateur et de les utiliser l'année.