Bonjour, je veux détecter le navigateur, IE 8 ou plus me conviendra. Pour cela, j'ai utilisé le code suivant mais il échoue pour IE 11. Pour autre sa détection correctement.
function getInternetExplorerVersion()
{
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer') {
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat(RegExp.$1);
}
return rv;
}
Ci-dessous le lien que j'ai aussi essayé mais qui n'a pas réussi.
Vous pouvez explicitement détecter IE11 avec la vérification suivante (en utilisant détection de fonctionnalité):
if (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject) {
// is IE11
}
Explication: toutes les versions de IE (sauf les très anciennes) ont window.ActiveXObject
propriété présente. IE11, cependant, masque cette propriété du DOM et cette propriété n'est plus définie. Mais la propriété elle-même est présente dans l'objet, donc la vérification de la présence de la propriété renvoie true dans toutes les versions IE, mais dans IE11, elle renvoie également false pour la deuxième vérification. Et, enfin, hasOwnProperty
est appelé via Object car dans IE8 (et je crois plus tôt) window
n'est pas un instanceof Object
et n'a pas de méthode hasOwnProperty
.
Une autre méthode, en utilisant la chaîne userAgent:
var ua = window.navigator.userAgent;
var versionSplit = /[\/\.]/i;
var versionRe = /(Version)\/([\w.\/]+)/i; // match for browser version
var operaRe = /(Opera|OPR)[\/ ]([\w.\/]+)/i;
var ieRe = /(?:(MSIE) |(Trident)\/.+rv:)([\w.]+)/i; // must not contain 'Opera'
var match = ua.match(operaRe) || ua.match(ieRe);
if (!match) {
return false;
}
if (Array.prototype.filter) {
match = match.filter(function(item) {
return (item != null);
});
} else {
// Hello, IE8!
for (var j = 0; j < match.length; j++) {
var matchGroup = match[j];
if (matchGroup == null || matchGroup == '') {
match.splice(j, 1);
j--;
}
}
}
var name = match[1].replace('Trident', 'MSIE').replace('OPR', 'Opera');
var versionMatch = ua.match(versionRe) || match;
var version = versionMatch[2].split(versionSplit);
Cela détectera toute version de IE si sa chaîne userAgent n'a pas été usurpée.
Il existe de très rares cas où vous devez réellement utiliser la détection de navigateur comme décrit ci-dessus. Dans la plupart des cas, l'approche de détection des fonctionnalités est préférable.
isIE11 = !!window.MSStream;
if(isIE11){
/* Something */
}
Utilisez !(window.ActiveXObject) && "ActiveXObject" in window
pour détecter explicitement IE11.
Pour détecter une version IE version, utilisez window.ActiveXObject || "ActiveXObject" in window
au lieu.
Comme déjà indiqué - ne faites pas de détection de navigateur, faites plutôt la détection de fonctionnalités. Cependant, comme je vois votre script est une ancienne version d'un script qui circule ici. Ceci est la version mise à jour qui détecte IE 11 aswel:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
else if (navigator.appName == 'Netscape')
{
var ua = navigator.userAgent;
var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
C'est mieux pour vous si vous évitez la détection du navigateur; si vous en avez besoin, voici une bonne explication de l'équipe MS:
Dans de rares cas, il peut être nécessaire d'identifier uniquement l'aperçu IE11. Utilisez le jeton Trident
pour le faire
Pour de nombreux sites Web hérités, certaines des mises à jour les plus visibles pour IE11 Preview impliquent la chaîne d'agent utilisateur. Voici ce qui est signalé pour IE11 Preview sur Windows 8.1 Preview: JavaScript
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0) comme Gecko
Comme pour les versions précédentes d'Internet Explorer, des parties de la chaîne d'agent utilisateur varient en fonction de l'environnement. Voici la chaîne pour l'aperçu IE11 sur Windows 7: JavaScript
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv: 11.0) comme Gecko
Si vous comparez ces chaînes à celles signalées par les versions antérieures d'Internet Explorer, vous constaterez les modifications suivantes: Les jetons compatibles ("compatible") et navigateur ("MSIE") ont été supprimés. Le jeton "like Gecko" a été ajouté (par souci de cohérence avec les autres navigateurs). La version du navigateur est maintenant signalée par un nouveau jeton de révision ("rv"). Ces modifications aident à empêcher IE11 Preview d'être (incorrectement) identifié comme une version antérieure. En général, vous devez éviter de détecter des navigateurs ou des versions de navigateur spécifiques. Les hypothèses sous-jacentes à ces tests ont tendance à conduire à des résultats faussement positifs lorsque les navigateurs sont mis à jour. À la place, détectez les fonctionnalités selon vos besoins et utilisez l'amélioration progressive pour offrir des expériences simplifiées aux navigateurs ou aux appareils qui ne prennent pas en charge les fonctionnalités dont vous avez besoin. Dans de rares cas, il peut être nécessaire d'identifier uniquement l'aperçu IE11. Utilisez le jeton Trident pour le faire
Lien: http://msdn.Microsoft.com/en-us/library/ie/bg182625 (v = vs.85) .aspx
Code plus simple et plus efficace et détectez toutes les versions d'IE/Edge:
if(navigator.appVersion.indexOf("MSIE") != -1 || navigator.appVersion.indexOf("Trident") != -1 || navigator.appVersion.indexOf("Edge") != -1){
// is IE
}
Le mantra "utiliser la détection des fonctionnalités" me mystifie. Lorsque vous rencontrez un bug, comment pouvez-vous déterminer quelle "fonctionnalité" est le coupable? Prenons par exemple ce bout de code:
$('input[name^=qty]').keyup(function(e) {
if (this.value.match(/[^0-9\/]*/g)) {
this.value = this.value.replace(/[^0-9\/]/g, '')
}
});
Il supprime les caractères non numériques du champ de saisie à mesure que l'utilisateur tape. Fonctionne dans FF, Chrome et Safari. Ne fonctionne pas dans N'IMPORTE QUELLE version de IE (jusqu'à 11, au moins): toutes les liaisons suivantes sur le champ de saisie échoueront.
J'ai récemment utilisé le code suivant pour détecter IE en général et cela a très bien fonctionné pour IE 11 également
var bs = document.body.style, isIE=false;
if ('msTransition' in bs) {
isIE = true;
}
L'idée est de rechercher le préfixe vedor.