Verifique se o usuário está usando o IE

391

Estou chamando uma função como a abaixo clicando em divs com uma determinada classe.

Existe uma maneira de verificar ao iniciar a função se um usuário está usando o Internet Explorer e abortar / cancelar se estiver usando outros navegadores para que seja executado apenas para usuários do IE? Os usuários aqui estariam no IE8 ou em versões superiores, portanto não precisaria cobrir o IE7 e versões inferiores.

Se eu pudesse dizer qual navegador eles estão usando, isso seria ótimo, mas não é necessário.

Exemplo de função:

$('.myClass').on('click', function(event)
{
    // my function
});
user2571510
fonte
11
Use o modernizador para detectar o IE ou outros navegadores. stackoverflow.com/questions/13478303/…
chris
7
Pelos modernos padrões de desenvolvimento da Web, é uma prática ruim desenvolver versões antigas do IE para começar.
Rosseyn
7
Na verdade, essa "má prática" é forçada pelos próprios padrões, por isso não é culpa do desenvolvedor ... Os navegadores funcionam de maneira diferente e as especificações são muito brandas em questões de implementação. Para fazer algo que não é de buggy e não é chato como o inferno, é preciso fazer a detecção do navegador. Gostaria de sugerir uma outra melhor prática: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Desculpe, mas esta loucura deve terminar em algum momento e de alguma forma ...
user2173353
2
Hoje, é melhor fazer "detecção de recursos" do que "detecção do navegador". Pergunte se o navegador faz o que você precisa.
Chris Rogers
2
@ Chris - desculpas ... significava que isso tivesse mais tom de brincadeira. Eu vou culpar o IE por roubar minha alegria e me deixar com amargura e frustração. :)
JDB ainda se lembra de Monica

Respostas:

477

Use o método JavaScript abaixo:

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

Você pode encontrar os detalhes abaixo no site de suporte da Microsoft:

Como determinar a versão do navegador a partir do script

Atualização: (suporte ao 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
fonte
27
embora isso funcione bem, pois a variável ua nunca começará com o MSIE, a escrita if (msie > 0)é enganosa. Se o valor não for encontrado, a função indexOf () retornará -1 e não 0. Portanto, if (msie > -1)seria mais explicativo.
Neville Nazerane 10/03
61
Isso retorna NaN no IE11, para mim.
Verism
7
@verism e outros: verificar esta resposta que também 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)Sei que isso funciona nos dias 10 e 11. Se você puder verificar o <IE9 e Edge, edite a resposta.
Indolering
595

Alguns anos depois, o navegador Edge agora usa o Chromium como mecanismo de renderização.
Infelizmente, verificar o IE 11 ainda é uma coisa.

Aqui está uma abordagem mais direta, pois as versões antigas do IE deveriam desaparecer.

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

Aqui está a minha resposta antiga (2014):

No Edge, a sequência do agente do usuário foi alterada.

/**
 * 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 da amostra:

alert('IEEdge ' + detectIEEdge());

Sequência padrão do IE 10:

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

Sequência padrão do IE 11:

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

Sequência padrão do 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 

Sequência padrão do 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 

Sequência padrão do 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 

Sequência padrão do 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 

Sequência padrão do 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 

Sequência padrão do 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 

Sequência padrão do Edge 18 (visualização 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 

Teste no CodePen:

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

Mario
fonte
4
Obrigado por comentar. Ainda não verifiquei sua resposta, mas quero comentar uma coisa: como o primeiro 'se' contém um 'retorno', você não precisa de um 'outro' depois.
613 Mario Mario
30
Apenas curioso, por que diabos eles alteram a linha do agente do usuário em novas versões do IE? A Microsoft não quer que detectemos seu terrível navegador da web.
C00000fd
3
@SameerAlibhai O que parece bom na teoria, mas na prática, especialmente no momento, não é prático. Às vezes, surgem problemas de que uma única detecção de "recurso" não abrange e, além disso, certos recursos têm peculiaridades de implementação que só podem ser contornadas com o conhecimento do navegador. E se eu quiser fazer algo simples como coletar estatísticas do navegador?
Leve
34
Deve-se notar que o Edge não é realmente 'IE12', mas é de fato um navegador completamente separado. O Windows 10 vem com o IE11 e o Edge instalados.
moloko 29/09
16
meu ódio por IE cresce
Kolob Canyon
135

Se tudo o que você deseja saber é se o navegador é IE ou não, faça o seguinte:

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
}

Atualização 1: Um método melhor

Eu recomendo isso agora. Ainda é muito legível e tem muito menos código :)

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

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

Obrigado a JohnnyFun nos comentários pela resposta abreviada :)

Atualização 2: Testando o IE em CSS

Primeiramente, se você puder, use @supportsinstruções em vez de JS para verificar se um navegador suporta um determinado recurso CSS.

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

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

(Observe que o IE não oferece suporte @supportse ignorará todos os estilos inseridos em uma @supportsinstrução.)

Se o problema não puder ser resolvido @supports, faça o seguinte:

// 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: classListé relativamente novo para JS e acho que, fora dos navegadores do IE, ele funciona apenas no IE11. Possivelmente também no IE10.)

Se você estiver usando SCSS (Sass) em seu projeto, isso poderá ser simplificado para:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

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

Atualização 3: Adicionando Microsoft Edge (não recomendado)

Se você também quiser adicionar o Microsoft Edge à lista, faça o seguinte. No entanto, eu não o recomendo, pois o Edge é um navegador muito mais competente que o IE.

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

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon
fonte
5
Ou o mesmo em alguns bytes: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Tridente /'); ;-)
Simon Steinberger
12
Minha versão faz sentido muito mais imediato, embora a um ser humano, mas menos bytes é sempre bom :)
Daniel Tonon
7
oums_ie = !!ua.match(/MSIE|Trident/)
xori
5
ou ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun 14/10
11
@SimonSteinberger ~tem algum significado?
1,21 gigawatts
45

Isso retorna truepara qualquer versão do Internet Explorer:

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

O userAgentparâmetro é opcional e o padrão é o agente do usuário do navegador.

Bendytree
fonte
Isso deve ser bom, mas você basicamente esqueceu de definir um valor padrão "return true" ou "return 1" para os navegadores IE. Atualmente, isso não retorna nenhum valor quando os navegadores IE são detectados.
Vincent Edward Gedaria Binua
10
Por que você gostaria de tratar o Edge como IE? Em termos de compatibilidade, eles têm pouco em comum atualmente.
minexew
@docta_faustus userAgent é um parâmetro, não um mundial
bendytree
29

É assim que a equipe do Angularjs está fazendo isso ( 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;

Existem várias linhas de código espalhadas por todo o uso como um número, como

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

e

if (enabled && msie < 8) {
ThisClark
fonte
window.document.documentMode não está definido no MS Edge
Veselin Vasilev
25
está indefinido no MS Edge porque o MS Edge não é o IE!
JCKödel 14/02
11
document.documentModeé suportado pelo IE8 +. Será 'undefined'para Edge ou Chrome / FireFox .... Alterei esse código para var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);que ele retorne a versão exata do IE para o IE8 +, 99 para navegadores que não sejam o IE (geralmente será um navegador moderno) e 1 para o IE5-7 antigo. Isso está escrito porque geralmente precisamos de trabalho especial apenas para alguns IE mais antigos. Então, if (IEver < 9) { ... }significa que se é um IE antigo
S.Serpooshan
29

Você pode usar o objeto navigator para detectar o usuário-navegador, não precisa do jquery

<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
fonte
4
Isto dá-me falsa para o meu IE11
Curtis
2
O agente do usuário do IE11 é diferente do MSIE (XX); O IE11 seria encontrado verificando-se o Trident.
Orfeu
Isso dá um falso positivo no Firefox 45.0.2.
Tim S. Van Haren
índice de teste erradoOf não retorna true ou false, como a função de teste regex, você tem navigator.userAgent.indexOf ("Trident /")! = -1 #
1133 Dahar Youssef
10

Usando as respostas acima; retorno booleano simples e condensado:

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

gdibble
fonte
11
Retorna false no FireFox 44.0.2 no Widnows 10. Qual versão do FireFox retorna true no SiKni8?
Arthur Hebert
9

Método 01:
$ .browser foi descontinuado no jQuery versão 1.3 e removido no 1.9

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

Método 02:
usando comentários condicionais

<!--[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:
usar JavaScript / detecção 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 referência

Aamir Shahzad
fonte
@radhe Atualizei a resposta, espero que isso funcione para você.
Aamir Shahzad
Como observação: o método 2 não funcionará no IE10 ou melhor no modo padrão. Para mais informações: Os comentários condicionais não são mais suportados
insertusernamehere
@insertusernamehere você está muito certo, por isso acho que o uso da .ie10classe é uma das melhores opções se você estiver fazendo alguma correção de css para ie10 apenas. Como o Internet Explorer 10 adiciona ".ie10"classe para elemento HTML <html class="ie10">, então você pode usá-lo como.ie10 .myclass {//some css here}
Aamir Shahzad
8

Eu só queria verificar se o navegador era IE11 ou mais antigo, porque bem, eles são uma porcaria.

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
fonte
2
este tem o meu voto para a sua alta consideração para nomear padrões da convenção
redbandit
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
fonte
Não responde a pergunta. Edge não é o IE.
Hda
hda, pergunta data de 2013, acho que hoje, é interessante não ignorar "Edge"
Boss 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
fonte
Não responde à pergunta, pois o Edge não é o IE. O Edge também não é o IE12. Quando o Edge baseado no Chromium é lançado, você também deve adicionar o Chrome ou o Opera a esta lista. (Tudo o que você deseja alcançar com isso, seria mais fácil para detectar Firefox então)
hda
5

Ou esta versão realmente curta retorna true se o navegador for o Internet Explorer:

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

Outra função simples (ainda legível por humanos) para detectar se o navegador é IE ou não (ignorando o Edge, o que não é nada mau):

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

Se você não quiser usar o useragent, também poderá fazer isso para verificar se o navegador é o IE. O código comentado é executado nos navegadores do IE e transforma o "falso" em "verdadeiro".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
fonte
11
O IE11 não suporta a compilação condicional
Gabriel Llamas
Eu apenas tentei isso e ainda funcionou. Tem certeza de que não suporta?
Dev4life
3

Sei que essa é uma pergunta antiga, mas, caso alguém se depare com ela novamente e tenha problemas com a detecção do IE11, aqui está uma solução para todas as versões atuais do IE.

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

eu usei isso

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

Muitas respostas aqui e gostaria de adicionar minha opinião. O IE 11 estava sendo tão burro em relação ao flexbox (veja todos os seus problemas e inconsistências aqui ) que eu realmente precisava de uma maneira fácil de verificar se um usuário está usando algum navegador IE (até 11 inclusive), mas excluindo o Edge, porque o Edge é realmente muito bom.

Com base nas respostas dadas aqui, escrevi uma função simples retornando uma variável booleana global que você pode usar posteriormente. É muito fácil verificar o 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!");
}

Dessa forma, você só precisa procurar uma vez e armazena o resultado em uma variável, em vez de precisar buscar o resultado em cada chamada de função. (Pelo que sei, você nem precisa esperar pelo documento pronto para executar esse código, pois o user agent não está relacionado ao DOM.)

Bram Vanroy
fonte
2

Tente isso se você estiver usando a versão 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;
}

Se o jQuery versão <1.9 ($ .browser foi removido no jQuery 1.9), use o seguinte código:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});
Rohan Kumar
fonte
Obrigado por isso. Infelizmente ainda estamos na versão 1.7.2 e não podemos mudar isso ainda.
user2571510
Tanto quanto eu posso ver, isso não leva em consideração os IEs mais novos, baseados no mecanismo Trident.
Bram Vanroy 6/07
Atualizado para mais IEs baseadas em Trident
Rohan Kumar
1

A solução do @ SpiderCode não funciona com o IE 11. Aqui está a melhor solução que usei a partir de agora no meu código, onde eu preciso de detecção do navegador para um recurso específico.

O IE11 não relata mais como MSIE. De acordo com esta lista de alterações, é intencional evitar a detecção incorreta.

O que você pode fazer se realmente deseja saber que é o IE é detectar o Trident / string no agente do usuário se navigator.appName retornar o Netscape, algo como (o não testado);

Graças a esta resposta

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

Abaixo, encontrei uma maneira elegante de fazer isso enquanto pesquisava no 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
fonte
11
Este é exatamente o código da minha caneta no CodePen , que faz parte da minha resposta a esta pergunta . ;-)
Mario
11
Sim, usei o mesmo, mas as pessoas com excesso de pilha não querem compartilhar o link. atualizará o link na referência aqui em diante. Obrigado pelo excelente trabalho Mario.
Rameshwar Vyevhare
1

Atualize a resposta do SpiderCode para corrigir problemas em que a string 'MSIE' retorna -1, mas corresponde a 'Trident'. Ele costumava retornar NAN, mas agora retorna 11 para essa versão do 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
fonte
0

Você pode detectar todo o Internet Explorer (última versão testada 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>

Veja aqui https://jsfiddle.net/v7npeLwe/

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

Você deve ver o resultado no console, use o chrome Inspecionar.

linjie
fonte
0

Coloquei esse código na função de documento pronto e ele só é acionado no Internet Explorer. Testado no 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
fonte
0

Isso funciona apenas abaixo da versão do 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
fonte
0

Função JavaScript para detectar a versão do 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
fonte
0

Necromante.

Para não depender da string do agente do usuário, verifique algumas propriedades:

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

Além disso, isso detecta o novo 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;
}

E isso detecta 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;
}

E este Safari:

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

Tente fazer assim

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

}
Deepak Kumar
fonte
O jQuery reprovou isso em 1.3 e completamente removido em 1.9.
GECA
-1

Acho que vai te ajudar aqui

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

Você pode usar $.browserpara obter informações de nome, fornecedor e versão.

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

Roemer
fonte
7
"Esta propriedade foi removida no jQuery 1.9 e está disponível apenas através do plugin jQuery.migrate."
Reeno