Não importa qual versão do navegador IE seja, ele é sempre um tanto incompatível com os padrões da Web. Para os trabalhadores de código, é naturalmente infeliz. A fim de considerar a questão de compatibilidade do IE, seja escrevendo CSS ou JS, o IE é frequentemente tratado de forma especial, o que requer algum julgamento. Este artigo não discute como distinguir os estilos do IE, apenas JS determina o navegador IE.
O método Javascript mais curto do mundo para determinar o navegador IE vem da Rússia! Ele foi testado em várias versões do IE e em outros navegadores populares atualmente. Embora a Microsoft tenha conhecimento dos bugs baseados no IE, ela nunca os corrigiu.
<tipo de script='texto/javascript'> var, ou seja, = !-[1,]; alerta(ou seja); </script> |
O resultado da execução do código acima: retorna verdadeiro no IE e retorna falso em outros navegadores padrão. !-[1,], apenas 6 bytes!
No entanto, se o julgamento for revertido, se o navegador padrão retornar verdadeiro e o IE retornar falso, ele poderá ser reduzido em um byte.
<tipo de script='texto/javascript'> notIe = -[1,]; se(-[1,]){ //Código padrão do navegador }outro{ // Código apenas para IE } </script> |
Depois de ler isso, você está curioso para saber como isso funciona? Por favor, continue lendo abaixo.
Este bug ocorre porque o IE adiciona um elemento vazio do array ao número total de elementos do array.
[1,]. Os navegadores padrão de comprimento retornarão 1 (com base no ECMAscript padrão, a vírgula "," no final do array será ignorada, isso é para facilitar a exibição em uma coluna e geração automática, etc.), mas IE retornará 2. Quando você imprime esse array, o IE retornará "1", que são dois elementos, enquanto outros navegadores padrão retornarão "1".
Isso é fácil de verificar executando o seguinte código no IE e FF:
<tipo de script='texto/javascript'> alerta([,]==','); //São 8 caracteres para determinar o IE </script> |
[1,] Na verdade, a operação do navegador é toString() para converter a string em uma string, e -[1,] é forçar a string a um número. O IE retornará NaN, mas infelizmente NaN não é um número, porque "1", após [1,] ser convertido em uma string, contém uma vírgula. Outros navegadores padrão retornarão -1, que é um número diferente de zero.
Você sabe, converter NaN em Booleano retornará falso, então -[1,] retornará falso no IE. Qualquer número diferente de 0 convertido para o tipo booleano (como -1) retornará verdadeiro em navegadores padrão. Portanto, obtemos um resultado de julgamento, !-[1,] retorna verdadeiro no IE, mas retorna falso em outros navegadores padrão. Isto também atinge o propósito de distinguir e julgar os navegadores IE.
Claro, como mencionado antes, a Microsoft já sabe desse bug há muito tempo, mas nunca o corrigiu, então no futuro > IE8 o navegador IE não tem certeza se ainda funcionará, mas basicamente depois de tantas gerações o IE tem não foi reparado e é improvável que o IE seja reparado no futuro.
A seguir estão alguns outros códigos para distinguir e julgar os navegadores IE. Você também pode consultar o seguinte:
<tipo de script='texto/javascript'> // Opção de Dean Edwards: var ou seja = /*@cc_on!@*/false; // Use a linha comentada: var ou seja//@cc_on=1; // Variação (variável mais curta): var ou seja = 'v'=='v'; // Opção para Gareth Hayes (ex-recordista): var ou seja = !+"v1"; </script> |