Desejo devolver os usuários do nosso site a uma página de erro se eles estiverem usando uma versão Internet Explorer
anterior à v9. Simplesmente não vale nosso tempo e dinheiro para apoiar IE pre-v9
. Os usuários de todos os outros navegadores que não sejam do IE são bons e não devem ser devolvidos. Aqui está o código proposto:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
// navigate to error page
}
}
Esse código fará o truque?
Para evitar alguns comentários que provavelmente aparecerão no meu caminho:
- Sim, eu sei que os usuários podem forjar suas
useragent
string. Eu não estou preocupado. - Sim, eu sei que os profissionais de programação preferem farejar o suporte a recursos em vez do tipo de navegador, mas não acho que essa abordagem faça sentido nesse caso. Eu já sei que todos os navegadores (relevantes) que não são do IE suportam os recursos que eu preciso e que todos
pre-v9 IE
navegadores não. Verificar recurso por recurso em todo o site seria um desperdício. - Sim, eu sei que alguém tentando acessar o site usando
IE v1
(ou> = 20) não conseguiria 'badBrowser' definido como true e a página de aviso não seria exibida corretamente. Esse é um risco que estamos dispostos a correr. - Sim, eu sei que a Microsoft tem "comentários condicionais" que podem ser usados para detecção precisa da versão do navegador. O IE não suporta mais comentários condicionais a partir de
IE 10
, tornando essa abordagem absolutamente inútil.
Quaisquer outros problemas óbvios para estar ciente?
javascript
internet-explorer
user-agent
browser-detection
Chad Decker
fonte
fonte
Respostas:
Esta é a minha maneira preferida de fazê-lo. Dá o controle máximo. (Nota: Instruções condicionais são suportadas apenas em IE5 - 9.)
Primeiro configure suas classes ie corretamente
Em seguida, você pode apenas usar CSS para criar exceções de estilo ou, se necessário, adicionar algum JavaScript simples:
Agradecimentos a Paul Irish .
fonte
Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
Retorna a versão do IE ou, se não, o IE retorna false
Exemplo:
ou
ou
fonte
"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
if (isIE () && isIE () < 9) {
Se ninguém mais adicionou um
addEventLister
método-e você estiver usando o modo de navegador correto, poderá verificar o IE 8 ou menos comInternet Explorer herdado e attachEvent (MDN)
fonte
Use comentários condicionais. Você está tentando detectar usuários do IE <9 e comentários condicionais funcionarão nesses navegadores; em outros navegadores (IE> = 10 e não IE), os comentários serão tratados como comentários HTML normais, que são o que são.
Exemplo de HTML:
Você também pode fazer isso puramente com script, se precisar:
fonte
Para detectar o MSIE (v6 - v7 - v8 - v9 - v10 - v11) facilmente:
fonte
Aqui está a maneira como o AngularJS verifica o IE
fonte
Para filtrar com segurança o IE8 e anteriores, a verificação de objetos globais pode ser usada:
fonte
Detectando a versão do IE usando a detecção de recursos (o IE6 +, os navegadores anteriores ao IE6 são detectados como 6, retorna nulo para os navegadores que não são do IE):
Edit: Eu criei um repositório bower / npm para sua conveniência: ie-version
Atualizar:
uma versão mais compacta pode ser escrita em uma linha como:
fonte
Essa função retornará o número da versão principal do IE como um número inteiro ou
undefined
se o navegador não for o Internet Explorer. Isso, como todas as soluções de agente de usuário, é aceitável para falsificação de agente de usuário (que é um recurso oficial do IE desde a versão 8).fonte
console.log(!!match && parseInt(match[1]))
,console.log(parseInt(match[1]))
econsole.log(match)
, mas nenhum resultado com qualquer um deles.getIEVersion()
. Por exemplo:if (getIEVersion() < 9) {/* IE 8 or below */}
if (!getIEVersion()) {/* Not IE */}
Detectar o IE em JS usando comentários condicionais
fonte
Isso funciona para mim. Eu o uso como um redirecionamento para uma página que explica por que não gostamos do <IE9 e fornecemos links para os navegadores que preferimos.
fonte
Seu código pode fazer a verificação, mas como você pensou, se alguém tentar acessar sua página usando o IE v1 ou> v19 não receberá o erro, portanto, pode ser mais seguro verificar a expressão Regex como este código abaixo:
fonte
Comentários condicionais não são mais suportados no IE a partir da versão 10, conforme observado na página de referência da Microsoft .
então use:
fonte
version 11
EDIT: Este código é INCRÍVEL! haha, dá um objeto com tudo dentro. A versão é 11, mas docModeIR é igual a 9. Obrigado!Para ie 10 e 11:
Você pode usar js e adicionar uma classe em html para manter o padrão de comentários condicionais :
Ou use uma biblioteca como o bowser:
https://github.com/ded/bowser
Ou modernizr para detecção de recursos:
http://modernizr.com/
fonte
Para detectar o Internet Explorer 10 | 11, você pode usar este pequeno script imediatamente após a tag body:
No meu caso, eu uso a biblioteca jQuery carregada na cabeça.
fonte
Isso foi respondido até a morte, mas é tudo o que você precisa.
fonte
fonte
Segundo a Microsoft , a seguir é a melhor solução, também é muito simples:
fonte
Vou recomendar não reescrever esse código pela enésima vez. Eu recomendo que você use a biblioteca Conditionizr ( http://conditionizr.com/ ), que é capaz de testar versões específicas do IE, bem como outros navegadores, sistemas operacionais e até a presença ou ausência de telas Retina.
Inclua o código apenas para os testes específicos necessários e você também obterá o benefício de uma biblioteca testada que passou por muitas iterações (e que seria fácil de atualizar sem quebrar o código).
Ele também combina bem com o Modernizr, que pode lidar com todos os casos em que é melhor testar um recurso específico em vez de um navegador específico.
fonte
Eu faço assim:
fonte
Essa abordagem para detectar o IE combina os pontos fortes e evita os pontos fracos da resposta do jKey usando comentários condicionais e a resposta de Owen usando agentes do usuário.
A abordagem de Owen pode falhar no IE 5 e 6 (relatório 7) e é suscetível à falsificação de UA, mas pode detectar versões do IE> = 10 (agora também inclui 12, que pós-datam a resposta de Owen).
Isso pode ser usado para definir classes úteis para o seu documento que contém a versão do IE:
Observe que ele detecta o modo de compatibilidade que está sendo usado, se o IE estiver no modo de compatibilidade. Observe também que a versão do IE é útil principalmente para versões mais antigas (<10); versões superiores são mais compatíveis com os padrões e, provavelmente, é melhor procurar recursos usando algo como modernizr.js.
fonte
Fiz um mix sublinhado conveniente para isso.
fonte
ou simplesmente
fonte
O script JS mais abrangente que eu encontrei para verificar versões do IE é http://www.pinlady.net/PluginDetect/IE/ . Toda a biblioteca está em http://www.pinlady.net/PluginDetect/Browsers/ .
Com o IE10, as instruções condicionais não são mais suportadas.
Com o IE11, o agente do usuário não contém mais o MSIE. Além disso, o uso do agente do usuário não é confiável, pois isso pode ser modificado.
Usando o script JS PluginDetect, você pode detectar para o IE e detectar as versões exatas usando um código muito específico e bem criado que se destina a versões específicas do IE. Isso é muito útil quando você se importa exatamente com qual versão do navegador você está trabalhando.
fonte
Percebo que estou um pouco atrasado para a festa aqui, mas estava pesquisando uma maneira simples de fornecer uma resposta sobre se um navegador é o IE e qual versão de 10 em diante era. Eu não codifiquei isso para a versão 11, portanto, talvez seja necessária uma pequena alteração para isso.
No entanto, esse é o código, ele funciona como um objeto que possui uma propriedade e um método e depende da detecção de objetos, em vez de raspar o objeto do navegador (que é extremamente danificado, pois pode ser falsificado).
O uso é
isIE.browser
uma propriedade que retorna um valor booleano e se baseia em comentários condicionais, o métodoisIE.detectedVersion()
que retorna um número entre 5 e 10. Estou assumindo que algo menor que 6 e você está em um território sério da velha escola e terá algo mais robusto do que um forro único e qualquer coisa maior que 10 e você está em um território mais novo. Li algo sobre o IE11 que não suporta comentários condicionais, mas ainda não investiguei completamente, talvez para uma data posterior.De qualquer forma, como é, e para um liner, ele abordará o básico do navegador IE e da detecção de versão. Está longe de ser perfeito, mas é pequeno e pode ser facilmente alterado.
Apenas para referência, e se alguém tiver alguma dúvida sobre como realmente implementar isso, o seguinte condicional deve ajudar.
fonte
Detectar o IE e suas versões não poderia ser mais fácil, e tudo que você precisa é um pouco de Javascript nativo / baunilha:
E esta é uma maneira de usá-lo:
.
Funciona em todas as versões do IE, incluindo versões superiores no Modo / Exibição de Compatibilidade mais baixo, e
documentMode
é proprietário do IE.fonte
Se você precisar excluir a versão do navegador IE, poderá seguir o código abaixo. Este código está funcionando bem para a versão IE6 para IE11
fonte
A janela executada no IE10 será atualizada automaticamente para o IE11 + e será padronizada no W3C
Atualmente, não precisamos oferecer suporte ao IE8-
fonte
fonte
fonte