Quando eu quero detectar o IE eu uso este código:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
Mas o IE11 está retornando "Você não está usando o Internet Explorer". Como posso detectá-lo?
internet-explorer
debugging
internet-explorer-11
browser-detection
forward-compatibility
Paul Sweatte
fonte
fonte
Respostas:
O IE11 não reporta mais
MSIE
, pois , 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 a
Trident/
sequência no agente do usuário senavigator.appName
retornarNetscape
, algo como (o não testado);Observe que o IE11 (afaik) ainda está em pré-visualização e o agente do usuário pode mudar antes do lançamento.
fonte
it's intentional to avoid mis-detection
- Infelizmente, agora que IE11 é liberado, temos o código que está quebrado na única IE11, enquanto que uma detecção correta do IE teria funcionado ...function isIE() { return ((navigator.appName == 'Microsoft Internet Explorer') || ((navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null))); }
var isIE11 = !!navigator.userAgent.match(/Trident\/7\./);
fonteUse
!(window.ActiveXObject) && "ActiveXObject" in window
para detectar o IE11 explicitamente.Para detectar qualquer versão do IE (pré-Edge, "Trident"), use em seu
"ActiveXObject" in window
lugar.fonte
window.ActiveXObject
, conforme descrito no artigo, retornaundefined
agora no IE11 (assim como nos navegadores que não são da Microsoft). O teste usando oin
operador javascript retornatrue
em todos os navegadores da Microsoft; portanto, ambos são estritamente no IE11. Se a Microsoft emitir uma alteração no comportamento doin
operador, sim, esse método será interrompido.Use
MSInputMethodContext
como parte de uma verificação de detecção de recurso. Por exemplo:Referências
fonte
#false
em não-IE, IE8,9,10, Edge 14,15.#true
somente no IE11. Não testou com o modo de documento ativo. Testado com o Browserstack.Eu li suas respostas e fiz uma mistura. Parece funcionar com o Windows XP (IE7 / IE8) e Windows 7 (IE9 / IE10 / IE11).
Claro que se eu retornar 0, significa que não há IE.
fonte
Obtenha a versão do IE do agente do usuário
Como funciona: a sequência de agente do usuário para todas as versões do IE inclui uma parte " versão do espaço MSIE " ou " versão com espaço ou dois pontos do cólon do outro texto rv do Trident ". Sabendo disso, pegamos o número da versão em uma
String.match()
expressão regular. Umtry-catch
bloco é usado para reduzir o código; caso contrário, precisaríamos testar os limites do array para navegadores que não sejam o IE.Nota: O agente do usuário pode ser falsificado ou omitido, às vezes sem intenção, se o usuário configurou o navegador para um "modo de compatibilidade". Embora isso não pareça muito problema na prática.
Obtenha a versão do IE sem o agente do usuário
Como funciona: cada versão do IE adiciona suporte para recursos adicionais não encontrados nas versões anteriores. Assim, podemos testar os recursos de maneira descendente. A ternário seqüência é usado aqui por brevidade, embora
if-then
eswitch
declarações iria funcionar tão bem. A variávelie
é definida como um número inteiro de 5 a 11, ou 1 para mais antigo ou 99 para mais novo / não IE. Você pode configurá-lo como 0 se quiser apenas testar o IE 1-11 exatamente.Nota: A detecção de objetos pode ser interrompida se o seu código for executado em uma página com scripts de terceiros que adicionam polyfills para coisas como
document.addEventListener
. Em tais situações, o agente do usuário é a melhor opção.Detectar se o navegador é moderno
Se você estiver interessado apenas em saber se um navegador suporta ou não a maioria dos padrões HTML 5 e CSS 3, você pode razoavelmente supor que o IE 8 e inferiores permanecem os principais aplicativos problemáticos. O teste
window.getComputedStyle
também fornecerá uma combinação bastante boa de navegadores modernos (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). O IE 9 aprimora muito o suporte a padrões, mas a animação CSS nativa requer o IE 10.fonte
var ie = 0; try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; } catch(e){} if (ie !== 0) { location.href = "../ie-redirect/redirect.html"; }
JS angular faz dessa maneira.
msie será um número positivo se o seu IE e NaN para outro navegador como chrome, firefox.
porque ?
No Internet Explorer 11, a cadeia do agente do usuário mudou significativamente.
consulte isto:
msdn # 1 msdn # 2
fonte
solução:
fonte
This is IE 0
Estou usando um método mais simples:
O objeto global do navegador possui pontos de contato de propriedade, no Internet Exlorer 11 é chamado de msMaxTouchPoints tho.
Então, se você procurar:
Você encontrará o Internet Explorer 11.
fonte
fonte
Tente isto:
fonte
!navigator.userAgent.match("Acoo Browser;") && navigator.userAgent.match(/MSIE/i) ? true : false
mas isso nem sempre funciona, porque o navegador acoo nem sempre tem "Acoo Browser;" em seu useragent, mas na verdade você não precisa se preocupar com o fato de o navegador acoo ter "MSIE" em seu user agent, porque o navegador acoo é quase o mesmo.Este parece ser um método melhor. "indexOf" retorna -1 se nada for correspondido. Ele não substitui as classes existentes no corpo, apenas as adiciona.
fonte
Detecte a maioria dos navegadores com isso:
https://gist.github.com/earlonrails/5266945
fonte
Eu usei o
onscroll
evento no elemento com a barra de rolagem. Quando acionado no IE, adicionei a seguinte validação:fonte
Somente para o navegador IE:
use alerta (ie);
Teste:
Atualização 01 de junho de 2017
Agora poderíamos usar algo mais fácil e mais simples:
fonte
Francamente, eu diria que use uma biblioteca que faça o que você precisa (como platform.js por exemplo). Em algum momento, as coisas mudarão e a biblioteca estará equipada para essas mudanças e a análise manual usando expressões regulares falhará.
Graças a Deus o IE vai embora ...
fonte