Vérifiez si l'utilisateur utilise IE

391

J'appelle une fonction comme celle ci-dessous en cliquant sur divs avec une certaine classe.

Existe-t-il un moyen de vérifier au démarrage de la fonction si un utilisateur utilise Internet Explorer et de l'annuler / annuler s'il utilise d'autres navigateurs afin qu'elle ne fonctionne que pour les utilisateurs IE? Les utilisateurs ici seraient tous sur IE8 ou versions supérieures, donc je n'aurais pas besoin de couvrir IE7 et les versions inférieures.

Si je pouvais dire quel navigateur ils utilisent, ce serait bien mais ce n'est pas obligatoire.

Exemple de fonction:

$('.myClass').on('click', function(event)
{
    // my function
});
user2571510
la source
1
Utilisez modernizer pour détecter IE ou d'autres navigateurs. stackoverflow.com/questions/13478303/…
chris
7
Selon les normes de développement Web modernes, il est mauvais de commencer par développer les anciennes versions d'IE.
Rosseyn
7
En fait, cette "mauvaise pratique" est forcée par les normes elles-mêmes, donc ce n'est pas la faute du développeur ... Les navigateurs fonctionnent différemment et les spécifications sont trop souples sur les problèmes d'implémentation. Pour faire quelque chose qui n'est pas bogué et pas ennuyeux, il faut faire une détection de navigateur. Je suggère une autre meilleure pratique: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Désolé, mais cette folie doit se terminer à un moment donné et d'une manière ou d'une autre ...
user2173353
2
Il est préférable aujourd'hui de faire la "détection des fonctionnalités" plutôt que la "détection du navigateur". Demandez plutôt si le navigateur fait ce dont vous avez besoin.
Chris Rogers
2
@Chris - excuses ... signifiait pour cela d'avoir plus d'un ton plaisantin. Je vais blâmer IE d'avoir volé ma joie et de me laisser avec amertume et frustration. :)
JDB se souvient encore de Monica le

Réponses:

477

Utilisez ci-dessous la méthode JavaScript:

function msieversion() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

Vous pouvez trouver les détails sur le site de support Microsoft ci-dessous:

Comment déterminer la version du navigateur à partir du script

Mise à jour: (prise en charge IE 11)

function msieversion() {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}
SpiderCode
la source
27
bien que cela fonctionnerait bien car la variable ua ne commencera jamais avec MSIE, l'écriture if (msie > 0)est trompeuse. Si la valeur n'est pas trouvée, la fonction indexOf () renvoie -1 et non 0. Ce if (msie > -1)serait donc plus explicatif.
Neville Nazerane
61
Cela renvoie NaN dans IE11, pour moi.
verism
7
@verism et autres: cochez cette réponse qui fonctionne également pour IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri
8
navigator.userAgent.indexOf ("MSIE")> 0 || navigator.userAgent.indexOf ("Trident")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe
12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Je sais que cela fonctionne sur 10 et 11. Si vous pouvez vérifier <IE9 et Edge, modifiez la réponse.
Indoloration
595

C'est plusieurs années plus tard, et le navigateur Edge utilise désormais Chromium comme moteur de rendu.
Malheureusement, la vérification d'IE 11 est toujours une chose.

Voici une approche plus simple, car les anciennes versions d'IE devraient disparaître.

if (window.document.documentMode) {
  // Do IE stuff
}

Voici mon ancienne réponse (2014):

Dans Edge, la chaîne de l'agent utilisateur a changé.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        // IE 10 or older => return version number
        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
    }

    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
        // IE 11 => return version number
        var rv = ua.indexOf('rv:');
        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
    }

    var edge = ua.indexOf('Edge/');
    if (edge > 0) {
       // Edge => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Exemple d'utilisation:

alert('IEEdge ' + detectIEEdge());

Chaîne par défaut d'IE 10:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

Chaîne par défaut d'IE 11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

Chaîne par défaut de Edge 12:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0 

Chaîne par défaut de Edge 13 (thx @DrCord):

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586 

Chaîne par défaut de Edge 14:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Chaîne par défaut de Edge 15:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

Chaîne par défaut de Edge 16:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

Chaîne par défaut de Edge 17:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

Chaîne par défaut de Edge 18 (aperçu d'initié):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Testez chez CodePen:

http://codepen.io/gapcode/pen/vEJNZN

Mario
la source
4
Merci d'avoir commenté. Je n'ai pas encore vérifié votre réponse, mais je veux commenter une chose: comme le premier «si» contient un «retour», vous n'avez pas besoin d'un «autre» par la suite.
Mario
30
Juste curieux, pourquoi diable changent-ils la ligne d'agent utilisateur dans les nouvelles versions d'IE? MS ne veut vraiment pas que nous détections son horrible navigateur Web.
c00000fd
3
@SameerAlibhai Ce qui sonne bien en théorie mais en pratique, surtout actuellement, ce n'est pas pratique. Parfois, des problèmes surviennent qu'une seule détection de «fonctionnalité» n'inclut pas et, en plus, certaines fonctionnalités ont des bizarreries d'implémentation qui ne peuvent être résolues qu'avec la connaissance du navigateur. Et si je veux faire quelque chose de simple comme collecter des statistiques sur le navigateur?
léger
34
Il convient de noter que Edge n'est pas vraiment «IE12» mais est en fait un navigateur complètement séparé. Windows 10 est livré avec IE11 et Edge installés.
moloko
16
ma haine pour IE grandit
Kolob Canyon
135

Si tout ce que vous voulez savoir, c'est si le navigateur est IE ou non, vous pouvez le faire:

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

Mise à jour 1: une meilleure méthode

Je le recommande maintenant. C'est toujours très lisible et c'est beaucoup moins de code :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

Merci à JohnnyFun dans les commentaires pour la réponse abrégée :)

Mise à jour 2: test pour IE en CSS

Tout d'abord, si vous le pouvez, vous devez utiliser des @supportsinstructions au lieu de JS pour vérifier si un navigateur prend en charge une certaine fonctionnalité CSS.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Notez qu'IE ne prend pas @supportsdu tout en charge et ignorera tous les styles placés à l'intérieur d'un@supports instruction.)

Si le problème ne peut pas être résolu, @supportsvous pouvez le faire:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Remarque: classList est relativement nouveau pour JS et je pense que, parmi les navigateurs IE, il ne fonctionne que dans IE11. Peut-être aussi IE10.)

Si vous utilisez SCSS (Sass) dans votre projet, cela peut être simplifié pour:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

Mise à jour 3: ajout de Microsoft Edge (non recommandé)

Si vous souhaitez également ajouter Microsoft Edge à la liste, vous pouvez procéder comme suit. Cependant, je ne le recommande pas car Edge est un navigateur beaucoup plus compétent qu'IE.

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon
la source
5
Ou la même chose en quelques octets: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Trident /'); ;-)
Simon Steinberger
12
Ma version a un sens beaucoup plus immédiat pour un humain, mais moins d'octets est toujours bon :)
Daniel Tonon
7
oums_ie = !!ua.match(/MSIE|Trident/)
xori
5
ou ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun
1
@SimonSteinberger a-t- ~il une signification?
1,21 gigawatts le
45

Cela revient truepour n'importe quelle version d'Internet Explorer:

function isIE(userAgent) {
  userAgent = userAgent || navigator.userAgent;
  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1;
}

Le userAgentparamètre est facultatif et correspond par défaut à l'agent utilisateur du navigateur.

bendytree
la source
Cela devrait être bon, mais vous avez simplement oublié de définir une valeur par défaut "return true" ou "return 1" pour les navigateurs IE. Actuellement, cela ne renvoie aucune valeur lorsque les navigateurs IE sont détectés.
Vincent Edward Gedaria Binua
10
Pourquoi voudriez-vous traiter Edge comme IE? En termes de compatibilité, ils ont peu en commun de nos jours.
minexew
@docta_faustus userAgent est un paramètre, pas un global
bendytree
29

C'est ainsi que l'équipe Angularjs le fait ( v 1.6.5 ):

var msie, // holds major version number for IE, or NaN if UA is not IE.

// Support: IE 9-11 only
/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
msie = window.document.documentMode;

Ensuite, il y a plusieurs lignes de code dispersées tout au long de l'utiliser comme un nombre tel que

if (event === 'input' && msie <= 11) return false;

et

if (enabled && msie < 8) {
ThisClark
la source
window.document.documentMode n'est pas défini dans MS Edge
Veselin Vasilev
25
il n'est pas défini dans MS Edge car MS Edge n'est pas IE!
JCKödel
1
document.documentModeest pris en charge par IE8 +. Ce sera 'undefined'pour Edge ou Chrome / FireFox .... J'ai changé ce code pour var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);qu'il renvoie la version exacte d'IE pour IE8 +, 99 pour les navigateurs non IE (généralement ce sera un navigateur moderne) et 1 pour l'ancien IE5-7. Ceci est écrit parce que nous avons généralement besoin d'un travail spécial uniquement pour certains IE plus anciens. Donc, if (IEver < 9) { ... }si c'est un ancien IE
S.Serpooshan
29

Vous pouvez utiliser l'objet navigateur pour détecter l'utilisateur-navigateur, vous n'avez pas besoin de jquery pour cela

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

http://www.javascriptkit.com/javatutors/navigator.shtml

John Smith
la source
4
Cela me donne de faux pour mon IE11
Curtis
2
L'agent utilisateur d'IE11 est différent de MSIE (XX); IE11 serait trouvé en vérifiant Trident.
Orpheus
Cela donne un faux positif dans Firefox 45.0.2.
Tim S.Van Haren
faux test indexOf ne retourne pas vrai ou faux comme la regex de la fonction de test que vous avez fait navigator.userAgent.indexOf ("Trident /")! = -1
Dahar Youssef
10

En utilisant les réponses ci-dessus; retour booléen simple et condensé:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);

gdibble
la source
1
Renvoie false dans FireFox 44.0.2 sur Widnows 10. Quelle version de FireFox renvoie true @ SiKni8?
Arthur Hebert
9

Méthode 01:
$ .browser a été déconseillé dans jQuery version 1.3 et supprimé dans 1.9

if ( $.browser.msie) {
  alert( "Hello! This is IE." );
}

Méthode 02: à l'
aide de commentaires conditionnels

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

Méthode 03:

 /**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
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;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
    }

    alert( msg );
}

Méthode 04:
utiliser JavaScript / détection manuelle

/*
     Internet Explorer sniffer code to add class to body tag for IE version.
     Can be removed if your using something like Modernizr.
 */
 var ie = (function ()
 {

     var undef,
     v = 3,
         div = document.createElement('div'),
         all = div.getElementsByTagName('i');

     while (
     div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->',
     all[0]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

Lien de référence

Aamir Shahzad
la source
@radhe J'ai mis à jour la réponse, j'espère que cela fonctionnera pour vous.
Aamir Shahzad,
Remarque: la méthode 2 ne fonctionnera pas dans IE10 ou mieux en mode standard. Pour plus d'informations: les commentaires conditionnels ne sont plus pris en charge
insertusernamehere
@insertusernamehere vous avez tout à fait raison, pour cela je pense que l'utilisation de la .ie10classe est l'une des meilleures options si vous faites un correctif css pour ie10 uniquement. Comme Internet Explorer 10 ajoute de la ".ie10"classe à l'élément HTML <html class="ie10">, vous pouvez ensuite l'utiliser comme.ie10 .myclass {//some css here}
Aamir Shahzad
8

Je voulais juste vérifier si le navigateur était IE11 ou plus ancien, car bon, ce sont des conneries.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}
Bill_VA
la source
2
cela obtient mon vote pour sa haute considération pour les normes de convention de dénomination
redbandit
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
la source
Ne répond pas à la question. Edge n'est pas IE.
hda
hda, la question date de 2013, je pense qu'aujourd'hui, il est intéressant de ne pas ignorer "Edge"
Boss COTIGA
5

Utilisation de modernizr

Modernizr.addTest('ie', function () {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf('MSIE ') > 0;
    var ie11 = ua.indexOf('Trident/') > 0;
    var ie12 = ua.indexOf('Edge/') > 0;
    return msie || ie11 || ie12;
});
kevnk
la source
Ne répond pas à la question car Edge n'est pas IE. Edge n'est pas non plus IE12. Lorsque Edge basé sur Chromium est disponible, vous devez également ajouter Chrome ou Opera à cette liste. (Quoi que vous vouliez réaliser par là, il serait alors plus facile de détecter Firefox)
hda
5

Ou cette version vraiment courte, renvoie true si le navigateur est Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}
Floris
la source
4

Encore une autre fonction simple (mais lisible par l'homme) pour détecter si le navigateur est IE ou non (en ignorant Edge, ce qui n'est pas mal du tout):

function isIE() {
  var ua = window.navigator.userAgent;
  var msie = ua.indexOf('MSIE '); // IE 10 or older
  var trident = ua.indexOf('Trident/'); //IE 11

  return (msie > 0 || trident > 0);
}
Chuck Le Butt
la source
3

Si vous ne souhaitez pas utiliser l'agent utilisateur, vous pouvez également le faire pour vérifier si le navigateur est IE. Le code commenté s'exécute réellement dans les navigateurs IE et transforme le "faux" en "vrai".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
la source
1
IE11 ne prend pas en charge la compilation conditionnelle
Gabriel Llamas
Je viens de l'essayer et cela a toujours fonctionné. Êtes-vous sûr qu'il ne le prend pas en charge?
dev4life
3

Je sais que c'est une vieille question, mais au cas où quelqu'un le rencontrerait à nouveau et aurait des problèmes avec la détection d'IE11, voici une solution de travail pour toutes les versions actuelles d'IE.

var isIE = false;
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
    isIE = true;   
}
Ty Bailey
la source
3

j'ai utilisé ça

function notIE(){
    var ua = window.navigator.userAgent;
    if (ua.indexOf('Edge/') > 0 || 
        ua.indexOf('Trident/') > 0 || 
        ua.indexOf('MSIE ') > 0){
       return false;
    }else{
        return true;                
    }
}
Jop Knoppers
la source
2

Beaucoup de réponses ici, et je voudrais ajouter ma contribution. IE 11 était un tel cul concernant la flexbox (voir tous ses problèmes et incohérences ici ) que j'avais vraiment besoin d'un moyen facile de vérifier si un utilisateur utilise un navigateur IE (jusqu'à 11 inclus) mais en excluant Edge, car Edge est en fait pas mal.

Sur la base des réponses données ici, j'ai écrit une fonction simple renvoyant une variable booléenne globale que vous pouvez ensuite utiliser sur toute la ligne. Il est très facile de vérifier IE.

var isIE;
(function() {
    var ua = window.navigator.userAgent,
        msie = ua.indexOf('MSIE '),
        trident = ua.indexOf('Trident/');

    isIE = (msie > -1 || trident > -1) ? true : false;
})();

if (isIE) {
    alert("I am an Internet Explorer!");
}

De cette façon, vous ne devez effectuer la recherche qu'une seule fois et vous stockez le résultat dans une variable, plutôt que d'avoir à récupérer le résultat à chaque appel de fonction. (Pour autant que je sache, vous n'avez même pas besoin d'attendre que le document soit prêt à exécuter ce code car l'agent utilisateur n'est pas lié au DOM.)

Bram Vanroy
la source
2

Essayez ceci si vous utilisez la version jquery> = 1.9 ,

var browser;
jQuery.uaMatch = function (ua) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
        /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
        /(msie) ([\w.]+)/.exec(ua) || 
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
       /(Trident)[\/]([\w.]+)/.exec(ua) || [];

    return {
        browser: match[1] || "",
        version: match[2] || "0"
    };
};
// Don't clobber any existing jQuery.browser in case it's different
if (!jQuery.browser) {
    matched = jQuery.uaMatch(navigator.userAgent);
    browser = {};

    if (matched.browser) {
        browser[matched.browser] = true;
        browser.version = matched.version;
    }

    // Chrome is Webkit, but Webkit is also Safari.
    if (browser.chrome) {
        browser.webkit = true;
    } else if (browser.webkit) {
        browser.safari = true;
    }

    jQuery.browser = browser;
}

Si vous utilisez jQuery version <1.9 ($ .browser a été supprimé dans jQuery 1.9), utilisez plutôt le code suivant:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});
Rohan Kumar
la source
Merci pour cela. Malheureusement, nous sommes toujours sur la version 1.7.2 et ne pouvons pas encore changer cela.
user2571510
Pour autant que je sache, cela ne prend pas en compte les nouveaux IE, basés sur le moteur Trident.
Bram Vanroy
Mis à jour pour les derniers IE basés sur Trident
Rohan Kumar
1

La solution de @ SpiderCode ne fonctionne pas avec IE 11. Voici la meilleure solution que j'utilise désormais dans mon code où j'ai besoin de la détection du navigateur pour une fonctionnalité particulière.

IE11 ne signale plus en tant que MSIE, selon cette liste de modifications, il est intentionnel d'éviter toute détection erronée.

Ce que vous pouvez faire si vous voulez vraiment savoir que c'est IE, c'est détecter le Trident / chaîne dans l'agent utilisateur si navigator.appName renvoie Netscape, quelque chose comme (le non testé);

Merci à cette réponse

function isIE()
{
  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 == -1 ? false: true;
}
AnujKu
la source
1

Ci-dessous, j'ai trouvé une manière élégante de le faire en recherchant sur Google ---

/ detect IE
var IEversion = detectIE();

if (IEversion !== false) {
  document.getElementById('result').innerHTML = 'IE ' + IEversion;
} else {
  document.getElementById('result').innerHTML = 'NOT IE';
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // IE 12 / Spartan
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge (IE 12+)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}
Rameshwar Vyevhare
la source
1
C'est exactement le code de mon stylo chez CodePen , qui fait partie de ma réponse à cette question . ;-)
Mario
1
Oui, j'ai utilisé la même chose, mais les gens qui débordent ne veulent pas partager le lien. mettra à jour le lien en référence ici. Merci pour l'excellent travail de Mario.
Rameshwar Vyevhare
1

Mettez à jour la réponse de SpiderCode pour résoudre les problèmes où la chaîne «MSIE» renvoie -1 mais correspond à «Trident». Il retournait NAN, mais renvoie maintenant 11 pour cette version d'IE.

   function msieversion() {
       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       if (msie > -1) {
           return ua.substring(msie + 5, ua.indexOf(".", msie));
       } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) {
           return 11;
       } else {
           return false;
       }
    }
JeremyS
la source
0

Vous pouvez détecter tout Internet Explorer (dernière version testée 12).

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

Voir ici https://jsfiddle.net/v7npeLwe/

Rogerio de Moraes
la source
0
function msieversion() {
var ua = window.navigator.userAgent;
console.log(ua);
var msie = ua.indexOf("MSIE ");

if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { 
    // If Internet Explorer, return version numbe
    // You can do what you want only in IE in here.
    var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
    if (isNaN(version_number)) {
        var rv_index=ua.indexOf("rv:");
        version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index)));
    }
    console.log(version_number);
} else {       
    //other browser   
    console.log('otherbrowser');
}
}

Vous devriez voir le résultat dans la console, veuillez utiliser Chrome Inspect.

linjie
la source
0

J'ai placé ce code dans la fonction de document prêt et il ne se déclenche que dans Internet Explorer. Testé dans Internet Explorer 11.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}
Isaac Levi Felix Salinas
la source
0

Cela ne fonctionne que sous la version IE 11.

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("version number",ie_version);

Murali Krishna
la source
0

Fonction JavaScript pour détecter la version d'Internet Explorer ou Edge

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}
Shohel
la source
0

Nécromancement.

Afin de ne pas dépendre de la chaîne de l'agent utilisateur, vérifiez simplement quelques propriétés:

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

De plus, cela détecte le nouveau Chredge (Anaheim):

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Et cela détecte le chrome:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Et ce Safari:

if(window.safari)
{
    console.log("Safari, yeah!");
}
Stefan Steiger
la source
-1

Essayez de faire comme ça

if ($.browser.msie && $.browser.version == 8) {
    //my stuff

}
Deepak Kumar
la source
jQuery a déprécié cela en 1.3 et complètement supprimé en 1.9.
geca
-1

Je pense que cela vous aidera ici

function checkIsIE() {
    var isIE = false;
    if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
        isIE = true;
    }
    if (isIE)  // If Internet Explorer, return version number
    {
        kendo.ui.Window.fn._keydown = function (originalFn) {
            var KEY_ESC = 27;
            return function (e) {
                if (e.which !== KEY_ESC) {
                    originalFn.call(this, e);
                }
            };
        }(kendo.ui.Window.fn._keydown);

        var windowBrowser = $("#windowBrowser").kendoWindow({
            modal: true,
            id: 'dialogBrowser',
            visible: false,
            width: "40%",
            title: "Thông báo",
            scrollable: false,
            resizable: false,
            deactivate: false,
            position: {
                top: 100,
                left: '30%'
            }
        }).data('kendoWindow');
        var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}
AirBlack
la source
-3

Vous pouvez utiliser $.browserpour obtenir des informations sur le nom, le fournisseur et la version.

Voir http://api.jquery.com/jQuery.browser/

Roemer
la source
7
"Cette propriété a été supprimée dans jQuery 1.9 et n'est disponible que via le plugin jQuery.migrate."
Reeno