É considerado uma má prática (e quão ruim) executar JavaScript diferente para o IE? Atualmente, estou escrevendo JavaScript e a maneira mais simples de trabalhar com as peculiaridades do IE parece verificar a versão do navegador e executar códigos diferentes
var browserName = navigator.appName;
if (browserName == "Microsoft Internet Explorer") {
//Do some stuff
}
else
{
//Do other stuff
}
É rápido e funciona bem, mas leva à duplicação de código e parece "hacky".
javascript
coding-standards
Tom Squires
fonte
fonte
Respostas:
sim
Inferir a funcionalidade de uma sequência de agentes do usuário é um teste fraco e propenso a erros. Embora relativamente comum, hoje em dia eu diria que isso certamente é considerado uma má prática.
Por exemplo, jquery tem uma função para detectar qual navegador um usuário está usando e está obsoleto desde a versão 1.3
Portanto: não faça o farejamento do UserAgent para decidir o que é o navegador ou o que ele é capaz.
Melhor prática
A melhor prática aceita para lidar com as diferenças entre os recursos do navegador é usar a detecção de recursos .
Existem algumas bibliotecas disponíveis para isso, a mais conhecida é provavelmente: Modernizr . O Modernizr facilita a adaptação do seu javascript às habilidades de um navegador. Funciona detectando o que está disponível; não adivinhar com base em uma string UserAgent (exceto como último recurso de fallback) e simplesmente adicionar classes à tag html. Isso torna não apenas possível lidar facilmente com casos diferentes em seus js, mas também resolver certas deficiências apenas com o css. por exemplo (apenas para ilustração):
fonte
Tudo bem quando é JS válido e não há abstrações
Não é exatamente uma prática ruim, mesmo que tenha melhorado, os navegadores não são 100% idênticos.
Mas, antes de iniciar casos especiais, observe com atenção se são realmente casos especiais e não apenas idiossincrasias de outro navegador. Nesse caso, você deve procurar uma solução usando os padrões que todos os navegadores compartilham ( caniuse.com é de grande ajuda para isso).
Quando você tiver certeza de que é realmente específico do navegador, deve procurar se pode usar uma biblioteca que oculte esses detalhes. A compatibilidade entre navegadores é uma coisa difícil de acertar; portanto, se alguém fez isso por você, apenas lucre.
Como último recurso, faça o que você precisa fazer;)
fonte
Se por "fazer algumas coisas" você quer dizer "usar o recurso específico do IE x" e "fazer algumas outras coisas" você quer dizer "usar um recurso mais comum y", é uma prática recomendada apenas verificar a presença de x ou y.
Suponho que você não esteja usando nenhuma biblioteca Javascript externa. Nesse caso, eu verificaria se o jQuery suporta a tarefa que você está tentando realizar. Se isso acontecer, eu usaria.
fonte
Use os comentários específicos do IE
<!--[if IE > 6]>...
ou algo assim. Funciona em todos os navegadores de baixa qualidade IE? -> IE8, mas não no IE9 +, que é considerado uma espécie de ok como navegador.Resumindo, quando você lida com um navegador super ruim que precisa de soluções alternativas, não há problema em fazer o que for necessário, mas evitando transformar um código de linha de base bem escrito em um hackatron.
Felizmente, o IE desaparecerá um dia e você poderá excluir o código hackatron e deixar apenas a linha de base bem escrita.
fonte
Eu acho que é melhor adiar esse tipo de tomada de decisão para o designer de estrutura e usar uma estrutura JavaScript que encapsule esse tipo de complexidade. Hoje em dia, temos AngularJS, JQuery, ReactJS e assim por diante, fazer coisas sem uma estrutura levaria a você esse tipo de dificuldade.
fonte
Bem, supondo que você esteja realmente interessado em aprender JavaScript, a melhor prática é a seguinte: prefira testar pela ausência / existência de métodos e escreva funções de normalização. Um exemplo totalmente manco, mas atinge três princípios:
A vantagem é que você nunca pode confiar 100% no farejamento do navegador e nunca sabe quando alguma outra biblioteca conectada na verdade não adicionou um método equivalente para você.
Se você está apenas tentando fazer as coisas ou quer aprender mais, recomendo o JQuery. Ele faz um trabalho estrondoso de eliminar o problema da API do DOM e manter um alto nível de normalização de plataforma cruzada, mas também é algo que você pode aprender bastante estudando sob o capô. Mais importante, se você se incomodar em continuar aprendendo realmente o JS principal, ele não se tornará inútil como muitas outras estruturas e bibliotecas JS e você continuará se beneficiando por poder desapossar seu lixo do JQuery com sua louca OOP-ish Habilidades.
Além disso, confira o site quirksmode.org para entender por que a Microsoft deve ser realmente desprezada por todos os IEs anteriores ao 9 na frente do JS e muitos detalhes detalhados sobre exatamente o que há de errado com sua API DOM proprietária e sugestões para contornar isso.
fonte