Detecção do Internet Explorer 11

124

Eu sei que o IE 11 tem uma sequência de agente de usuário diferente de todos os outros IE

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

Tentei detectar o IE 11 com a resposta especificada para esta pergunta '

Jquery falha ao detectar o IE 11

Isso é !!navigator.userAgent.match(/Trident\/7\./)

Mas estou recebendo erro Object not found and needs to be re-evaluated.

Então eu abri o console do desenvolvedor no IE11 e tentei acessar alguns objetos javascript predefinidos. Ainda estou recebendo o mesmo erro.

eu tentei

navigator.userAgent

window.navigator

console.log('test');

Alguém tem alguma idéia sobre isso?

Miqdad Ali
fonte
@ Bobkhin eu mencionei acima do meu problema. obtendo erroObject not found and needs to be re-evaluated.
Miqdad Ali 17/02
possível duplicata Como detectar IE 11 com javascript em Asp.net
randomSeed
possível duplicata de Como detectar o IE11?
Paul Sweatte

Respostas:

188

Editar 18 Nov 2016

Este código também funciona ( para quem prefere outra solução, sem usar o ActiveX )

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

Resposta original

Para verificar o Ie11, você pode usar este: (testado)

(ou execute isso )

!(window.ActiveXObject) && "ActiveXObject" in window

Eu tenho todos os VMS do IE:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Aviso: isso não funcionará para o IE11:

como você pode ver aqui, ele retorna true:

insira a descrição da imagem aqui

Então o que nós podemos fazer :

Aparentemente, eles adicionaram o espaço de bits da máquina:

ie11:

"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

ie12:

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

para que possamos fazer:

/x64|x32/ig.test(window.navigator.userAgent)

isso retornará verdadeiro apenas para ie11.

Royi Namir
fonte
1
@Jan. sim. somente o IE11 retornaria verdadeiro para toda essa condição. Eu apenas mostrei que <11 retornam false.
Royi Namir
1
@IanSteffy Isso é apenas para mostrar o resultado (!) Da operação. Você pode abrir um arquivo HTML, adicionar uma marca de script e executar o comando dentro desse script. Aqui, execute isso .
Royi Namir 13/10/2015
2
x64retorna Chrome e Edge
Gene R
3
Espere, há um IE12? Eu pensei que o IE11 fosse o último e que em breve não precisaremos mais nos preocupar com esse navegador estúpido! Sche
Michael Scheper
1
Será que não trabalhar para o meu IE 11.0.9600.19431 no Windows 7 Enterprise. Não existe window.MSInputMethodContext.
Heinrich Ulbricht
105

Para detectar rapidamente o MSIE (da versão 6 à 11):

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
EpokK
fonte
2
Não deve o segundo indexOf()ser > -1?
reformado
Sim, eu não sei por que é> 0 e não> -1, mas "Trident /" mostra-se muito mais longe na seqüência appVersion anyways-
chrismarx
22

Eu uso a seguinte função para detectar as versões 9, 10 e 11 do IE:

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  
KennyE
fonte
21

Todas as respostas acima ignoram o fato de que você mencionou que não tem janela ou navegador :-)

Então eu abro o console do desenvolvedor no IE11

e é aí que diz

Objeto não encontrado e precisa ser reavaliado.

e navegador, janela, console, nenhum deles existe e precisa ser reavaliado. Eu tive isso em emulação. basta fechar e abrir o console algumas vezes.

commonpike
fonte
5
bondade graciosa OBRIGADO por realmente ler a pergunta e responder ao problema com reavaliação.
marknadal
8
Trabalhou para mim também. É por isso que haverá festas em todo o mundo quando o IE morrer.
Voltrevo #
Fechar e abrir o console funcionou para mim. Comportamento estranho em comparação com o Firefox ou o Chrome (do IE mas, assim que as figuras.)
Ectropy
7

Uma maneira bastante segura e concisa de detectar apenas o IE 11 é

if(window.msCrypto) { /* I'm IE11 for sure */ }

ou algo parecido com isto
var IE11= !!window.msCrypto;


msCryptoé uma versão prefixada do window.cryptoobjeto e implementada apenas no IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

jj
fonte
A única solução de trabalho (a mais curta, mais limpa e a mais elegante)! Royi Namir também /x64|x32/ig.test(window.navigator.userAgent)se aplica ao Firefox!
Sándor Zuboly
4

E como eu implementei isso

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Miqdad Ali
fonte
1
Eu acho que você tem um erro de digitação em sua função. Primeiro, você faz a verificação da condição, que não é usada. Segundo, talvez você queira dizer && "ActiveXObject" in window. Terceiro: qual o truque com dupla negação !!?
dma_k 9/06/16
1
!! praticamente significa 'Coerce para booleano'.
Andrew Gray
4

Ok, tente isso, simples e para o IE11 e IE abaixo da versão 11

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1para versão IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1para versão IE abaixo da versão 11

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)

Dupinder Singh
fonte
2

Este link foi útil . Ele contém o código javascript para detectar todas as versões do IE até o IE11. Testei o script com o emulador IE11. Para encontrar o emulador IE11, clique com o botão direito do mouse no navegador da web e clique em "Inspecionar elemento". No canto inferior esquerdo da página, role a barra de navegação para baixo e clique no ícone na área de trabalho. A caixa suspensa "Cadeia do agente do usuário" contém opções para emular o IE6-11.

Funciona. Usei alguns minutos antes de escrever esta resposta. Não é possível postar instantâneos - reputação insuficiente.


Este é o código - siga o link para visualizá-lo novamente:

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// 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';

  // Edge 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 13
  // 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;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>

aghwotu
fonte
1

O uso desse RegExp parece funcionar no IE 10 e IE 11:

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

Eu não tenho um IE mais antigo que o IE 10 para testar isso.

antoineMoPa
fonte
0

Use o Navegador: -

O navigatoré um objeto que contém todas as informações sobre o navegador da máquina cliente.

navigator.appName retorna o nome do navegador da máquina cliente.

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Parth Raval
fonte
1
appName é o Netscape no IE 11. Eles fizeram todo o possível para enganar os desenvolvedores.
kagronick
0

Descobri que o IE11 está fornecendo mais de uma sequência de agentes de usuário em ambientes diferentes.

Em vez de confiar em MSIEoutras abordagens, é melhor confiar na Tridentversão

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

Espero que isto ajude :)

Mr.7
fonte