Compruebe si el usuario está usando IE

391

Estoy llamando a una función como la siguiente haciendo clic en divs con una determinada clase.

¿Hay alguna forma en que pueda verificar al iniciar la función si un usuario está usando Internet Explorer y cancelarlo / cancelarlo si está usando otros navegadores para que solo se ejecute para usuarios de IE? Los usuarios aquí estarían en IE8 o versiones superiores, por lo que no necesitaría cubrir IE7 y versiones inferiores.

Si pudiera decir qué navegador están usando, sería genial, pero no es obligatorio.

Función de ejemplo:

$('.myClass').on('click', function(event)
{
    // my function
});
usuario2571510
fuente
1
Use el modernizador para detectar IE u otros navegadores. stackoverflow.com/questions/13478303/…
chris
77
Según los estándares modernos de desarrollo web, para empezar es una mala práctica desarrollar versiones antiguas de IE.
Rosseyn
77
En realidad, esta "mala práctica" se ve obligada por los estándares mismos, por lo que no es culpa del desarrollador ... Los navegadores funcionan de manera diferente y las especificaciones son demasiado suaves en los problemas de implementación. Para hacer algo que no tenga errores y no sea aburrido como el infierno, uno tiene que hacer la detección del navegador. Yo sugeriría otro mejores prácticas: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Lo sentimos, pero esta locura debe terminar en algún momento y de alguna manera ...
user2173353
2
Es mejor practicar hoy hacer "detección de características" que "detección de navegador". Pregunte si el navegador hace lo que necesita en su lugar.
Chris Rogers
2
@Chris - disculpas ... para que eso tenga más tono jocoso. Voy a culpar a IE por robar mi alegría y dejarme con amargura y frustración. :)
JDB todavía recuerda a Mónica

Respuestas:

477

Utilice el siguiente método de 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;
}

Puede encontrar los detalles en el siguiente sitio de soporte de Microsoft:

Cómo determinar la versión del navegador a partir del script

Actualización: (soporte 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
fuente
27
aunque esto funcionaría bien ya que la variable ua nunca comenzará con MSIE, la escritura if (msie > 0)es engañosa. Si no se encuentra el valor, la función indexOf () devuelve -1 no 0. Por if (msie > -1)lo tanto , sería más explicativo.
Neville Nazerane
61
Esto devuelve NaN en IE11, para mí.
verismo
77
@verism y otros: verifique esta respuesta que también funciona para 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)Sé que esto funciona en 10 y 11. Si puede verificar <IE9 y Edge, edite la respuesta.
Intervalos
595

Han pasado varios años y el navegador Edge ahora usa Chromium como motor de renderizado.
La verificación de IE 11 sigue siendo una cosa, lamentablemente.

Aquí hay un enfoque más directo, ya que las versiones antiguas de IE deberían desaparecer.

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

Aquí está mi vieja respuesta (2014):

En Edge, la cadena del agente de usuario ha cambiado.

/**
 * 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;
}

Uso de la muestra:

alert('IEEdge ' + detectIEEdge());

Cadena predeterminada de IE 10:

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

Cadena predeterminada de IE 11:

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

Cadena predeterminada 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 

Cadena predeterminada 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 

Cadena predeterminada 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 

Cadena predeterminada 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 

Cadena predeterminada 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 

Cadena predeterminada 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 

Cadena predeterminada de Edge 18 (vista previa de información privilegiada):

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 

Prueba en CodePen:

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

Mario
fuente
44
Gracias por comentar Todavía no he verificado su respuesta, pero quiero comentar una cosa: como el primer 'si' contiene un 'retorno', no necesita un 'otro' después.
Mario
30
Solo por curiosidad, ¿por qué diablos cambian la línea de agente de usuario en las nuevas versiones de IE? MS en serio no quiere que detectemos su horrible navegador web.
c00000fd
3
@SameerAlibhai Lo que suena bien en teoría pero en la práctica, especialmente en la actualidad, no es práctico. A veces surgen problemas que una sola detección de "características" no abarca y, además, ciertas características tienen peculiaridades de implementación que solo se pueden solucionar con el conocimiento del navegador. ¿Qué sucede si quiero hacer algo simple como recopilar estadísticas del navegador?
Ligero
34
Cabe señalar que Edge no es realmente 'IE12' sino que de hecho es un navegador completamente separado. Windows 10 viene con IE11 y Edge instalados.
moloko
16
mi odio por IE crece
Kolob Canyon
135

Si todo lo que quiere saber es si el navegador es IE o no, puede hacer esto:

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
}

Actualización 1: un método mejor

Recomiendo esto ahora. Todavía es muy legible y es mucho menos código :)

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

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

Gracias a JohnnyFun en los comentarios por la respuesta abreviada :)

Actualización 2: Prueba para IE en CSS

En primer lugar, si puede, debe usar @supportssentencias en lugar de JS para verificar si un navegador admite una determinada función CSS.

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

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

(Tenga en cuenta que IE no es compatible @supportsen absoluto e ignorará cualquier estilo colocado dentro de una @supportsdeclaración).

Si el problema no se puede resolver @supports, puede hacer esto:

// 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 */
}

(Nota: classListes relativamente nuevo para JS y creo que, fuera de los navegadores IE, solo funciona en IE11. Posiblemente también IE10).

Si está utilizando SCSS (Sass) en su proyecto, esto se puede simplificar para:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

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

Actualización 3: Agregar Microsoft Edge (no recomendado)

Si también desea agregar Microsoft Edge a la lista, puede hacer lo siguiente. Sin embargo , no lo recomiendo, ya que Edge es un navegador mucho más competente que IE.

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

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon
fuente
55
O lo mismo en unos pocos bytes: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Trident /'); ;-)
Simon Steinberger
12
Mi versión tiene mucho más sentido inmediato para un humano, pero menos bytes siempre es bueno :)
Daniel Tonon
77
oms_ie = !!ua.match(/MSIE|Trident/)
xori
55
o ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun
1
@SimonSteinberger, ¿ ~tiene algún significado?
1.21 gigavatios
45

Esto devuelve truepara cualquier versión de Internet Explorer:

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

El userAgentparámetro es opcional y su valor predeterminado es el agente de usuario del navegador.

bendytree
fuente
Esto debería ser bueno, pero básicamente se olvidó de establecer un valor predeterminado "return true" o "return 1" para los navegadores IE. Actualmente, esto no devuelve ningún valor cuando se detectan navegadores IE.
Vincent Edward Gedaria Binua
10
¿Por qué quieres tratar a Edge como IE? En términos de compatibilidad, tienen poco en común hoy en día.
minexew
@docta_faustus userAgent es un parámetro, no un global
bendytree
29

Así es como lo está haciendo el equipo de Angularjs ( 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;

Luego, hay varias líneas de código dispersas a lo largo de su uso como un número como

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

y

if (enabled && msie < 8) {
ThisClark
fuente
window.document.documentMode no está definido en MS Edge
Veselin Vasilev
25
¡no está definido en MS Edge porque MS Edge no es IE!
JCKödel
1
document.documentModees compatible con IE8 +. Será 'undefined'para Edge o Chrome / FireFox .... Cambié este código a var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);tal que devuelva la versión exacta de IE para IE8 +, 99 para navegadores que no son IE (generalmente será un navegador moderno) y 1 para IE5-7 antiguo. Esto está escrito así porque generalmente necesitamos un trabajo especial solo para algunos IE antiguos. Entonces, if (IEver < 9) { ... }significa que es un viejo IE
S.Serpooshan
29

Puede usar el objeto del navegador para detectar el navegador del usuario, no necesita jquery para ello

<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
fuente
44
Esto me da falso para mi IE11
Curtis
2
El agente de usuario de IE11 es diferente a MSIE (XX); Los IE11 se encontrarían al verificar Trident.
Orfeo
Esto da un falso positivo en Firefox 45.0.2.
Tim S. Van Haren
índice de prueba incorrecto Si no devuelve verdadero o falso como la función de prueba regex que tiene, haga navigator.userAgent.indexOf ("Trident /")! = -1
Dahar Youssef
10

Usando las respuestas anteriores; Booleano de retorno simple y condensado:

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

gdibble
fuente
1
Devuelve false en FireFox 44.0.2 en Widnows 10. ¿Qué versión de FireFox devuelve true @ SiKni8?
Arthur Hebert
9

Método 01:
$ .browser quedó en desuso en jQuery versión 1.3 y se eliminó en 1.9

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

Método 02:
uso de comentarios condicionales

<!--[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étodo 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étodo 04:
Use JavaScript / Detección manual

/*
     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);
     }

 }());

Link de referencia

Aamir Shahzad
fuente
@radhe He actualizado la respuesta, espero que esto funcione para usted.
Aamir Shahzad
Como nota: el Método 2 no funcionará en IE10 o mejor en modo estándar. Para obtener más información: ya no se admiten comentarios condicionales
insertusernamehere
@insertusernameaquí tiene mucha razón, por eso creo que el uso de la .ie10clase es una de las mejores opciones si está haciendo alguna corrección de CSS para ie10 solamente. A medida que Internet Explorer 10 agrega ".ie10"clase al elemento HTML <html class="ie10">, puede usarlo como.ie10 .myclass {//some css here}
Aamir Shahzad
8

Solo quería comprobar si el navegador era IE11 o anterior, porque bueno, son basura.

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
fuente
2
esto tiene mi voto por su gran respeto por los estándares de las convenciones de nombres
redbandit
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
fuente
No responde la pregunta. Edge no es IE.
hda
hda, la pregunta data de 2013, creo que hoy es interesante no ignorar "Edge"
Jefe COTIGA
5

Usando 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
fuente
No responde la pregunta ya que Edge no es IE. Además, Edge no es IE12. Cuando se lanza Edge basado en Chromium, también debe agregar Chrome u Opera a esta lista. (Lo que sea que quieras lograr con esto, entonces sería más fácil detectar Firefox)
hda
5

O esta versión realmente corta, devuelve verdadero si los navegadores son Internet Explorer:

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

Otra función simple (aún legible por humanos) para detectar si el navegador es IE o no (ignorando Edge, que no está nada mal):

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
fuente
3

Si no desea utilizar el agente de uso, también puede hacerlo para verificar si el navegador es IE. El código comentado en realidad se ejecuta en los navegadores IE y convierte el "falso" en "verdadero".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
fuente
1
IE11 no admite compilación condicional
Gabriel Llamas
Acabo de probar esto y todavía funcionó. ¿Estás seguro de que no lo admite?
dev4life
3

Sé que esta es una vieja pregunta, pero en caso de que alguien vuelva a encontrarla y tenga problemas para detectar IE11, aquí hay una solución que funciona para todas las versiones actuales de IE.

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

he usado esto

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
fuente
2

Muchas respuestas aquí, y me gustaría agregar mi opinión. IE 11 estaba siendo tan imbécil con respecto a flexbox (vea todos sus problemas e inconsistencias aquí ) que realmente necesitaba una manera fácil de verificar si un usuario está usando cualquier navegador IE (hasta 11 inclusive) pero excluyendo Edge, porque Edge es realmente bastante agradable.

Basado en las respuestas dadas aquí, escribí una función simple que devuelve una variable booleana global que luego puede usar en la línea. Es muy fácil verificar 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 esta manera, solo tiene que hacer la búsqueda una vez, y almacena el resultado en una variable, en lugar de tener que buscar el resultado en cada llamada a la función. (Hasta donde sé, ni siquiera tiene que esperar a que el documento esté listo para ejecutar este código, ya que el agente de usuario no está relacionado con el DOM).

Bram Vanroy
fuente
2

Intente esto si está utilizando la versión 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 usa jQuery versión <1.9 ($ .browser fue eliminado en jQuery 1.9) use el siguiente código:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});
Rohan Kumar
fuente
Gracias por esto. Desafortunadamente, todavía estamos en la versión 1.7.2 y todavía no puedo cambiar esto.
user2571510
Hasta donde puedo ver, esto no tiene en cuenta los nuevos IE, que se basan en el motor Trident.
Bram Vanroy
Actualizado para los últimos IE basados ​​en Trident
Rohan Kumar el
1

La solución de @ SpiderCode no funciona con IE 11. Esta es la mejor solución que utilicé en adelante en mi código, donde necesito la detección del navegador para una función particular.

IE11 ya no informa como MSIE, de acuerdo con esta lista de cambios, es intencional para evitar la detección errónea.

Lo que puede hacer si realmente quiere saber que es IE es detectar el Tridente / cadena en el agente de usuario si navigator.appName devuelve Netscape, algo así como (el no probado);

Gracias a esta respuesta

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
fuente
1

A continuación encontré una forma elegante de hacer esto mientras busco en 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
fuente
1
Este es exactamente el código de mi bolígrafo en CodePen , que es parte de mi respuesta a esta pregunta . ;-)
Mario
1
Sí, utilicé lo mismo, pero la gente de desbordamiento de pila no quiere compartir el enlace. actualizará el enlace en referencia aquí en adelante. Gracias por el gran trabajo de Mario.
Rameshwar Vyevhare
1

Actualice la respuesta de SpiderCode para solucionar problemas donde la cadena 'MSIE' devuelve -1 pero coincide con 'Trident'. Solía ​​devolver NAN, pero ahora devuelve 11 para esa versión de 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
fuente
0

Puede detectar todo Internet Explorer (última versión probada 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>

Ver aquí https://jsfiddle.net/v7npeLwe/

Rogerio de Moraes
fuente
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');
}
}

Debería ver el resultado en la consola, utilice Chrome Inspect.

linjie
fuente
0

He colocado este código en la función de documento listo y solo se activa en Internet Explorer. Probado en 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
fuente
0

Esto solo funciona por debajo de la versión 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
fuente
0

Función de JavaScript para detectar la versión de Internet Explorer o 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
fuente
0

Nigromancia

Para no depender de la cadena de agente de usuario, solo verifique algunas propiedades:

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!');
}

Además, esto detecta el nuevo 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;
}

Y esto detecta el cromo:

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;
}

Y este Safari:

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

Intenta hacerlo así

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

}
Deepak Kumar
fuente
jQuery desaprobó esto en 1.3 y lo eliminó por completo en 1.9.
geca
-1

Creo que te ayudará aquí

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
fuente
-3

Puede usar $.browserpara obtener información sobre el nombre, el proveedor y la versión.

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

Roemer
fuente
77
"Esta propiedad se eliminó en jQuery 1.9 y solo está disponible a través del complemento jQuery.migrate".
Reeno