Eu tenho 5 addons / extensões para FF, Chrome, IE, Opera e Safari.
Como posso reconhecer o navegador do usuário e redirecionar (uma vez que um botão de instalação foi clicado) para baixar o complemento correspondente?
javascript
browser-detection
FrankC
fonte
fonte
Respostas:
Pesquisando a detecção confiável do navegador geralmente resulta na verificação da sequência do agente do usuário. Este método não é confiável, porque é trivial falsificar esse valor.
Eu escrevi um método para detectar navegadores digitando pato .
Use o método de detecção do navegador apenas se for realmente necessário, como mostrar instruções específicas do navegador para instalar uma extensão. Use a detecção de recursos quando possível.
Demonstração: https://jsfiddle.net/6spj1059/
Análise de confiabilidade
O método anterior dependia das propriedades do mecanismo de renderização (
-moz-box-sizing
e-webkit-transform
) para detectar o navegador. Esses prefixos serão eventualmente eliminados. Portanto, para tornar a detecção ainda mais robusta, mudei para características específicas do navegador:document.documentMode
.StyleMedia
construtor. Excluir Trident nos deixa com Edge.InstallTrigger
chrome
objeto global , contendo várias propriedades, incluindo umchrome.webstore
objeto documentado .chrome.webstore
foi preterida e indefinida nas versões recentesSafariRemoteNotification
, que foi introduzido após a versão 7.1, para cobrir todos os Safaris a partir do 3.0 e superior.window.opera
existe há anos, mas será descartado quando o Opera substituir seu mecanismo pelo Blink + V8 (usado pelo Chromium).chrome
objeto está definido (maschrome.webstore
não está). Como o Opera tenta clonar o Chrome, eu uso o agente do usuário que fareja para esse fim.!!window.opr && opr.addons
pode ser usado para detectar o Opera 20+ (sempre-verde).CSS.supports()
foi introduzido no Blink quando o Google ativou o Chrome 28. É claro que é o mesmo Blink usado no Opera.Testado com sucesso em:
fonte
window.chrome.webstore
é indefinido lá. Não foi verificado com as extensões do Firefox.is.js
mencionado em outro lugar funciona nas extensões Chrome e Firefox.isSafari
não funciona com o Safari 10. Vou argumentar que esta é uma solução ruim (não que eu tenha uma boa). Não há garantia de que muitas das coisas que sua verificação não serão removidas OU não serão adicionadas por outros navegadores. Todos os sites que estavam usando esse código para verificação do Safari simplesmente romperam com as atualizações do macOS Sierra ou Safari 10 :(isSafari
não funciona no<iframe>
Safari 10.1.2Você pode tentar a seguinte maneira de verificar a versão do navegador.
E se você precisa conhecer apenas a versão do navegador IE, pode seguir o código abaixo. Este código funciona bem para a versão IE6 para IE11
fonte
chrome
palavra-chave no useragent. exemplo de useragent safari -mozilla/5.0 (macintosh; intel mac os x 10_11_5) applewebkit/601.6.17 (khtml, like gecko) version/9.1.1 safari/601.6.17
if(navigator.userAgent.indexOf("Opera") != -1 || navigator.userAgent.indexOf('OPR') != -1 )
Eu sei que pode ser um exagero usar uma lib para isso, mas apenas para enriquecer o thread, você pode verificar o modo is.js de fazer isso:
fonte
is.js
e verifique como eles o fazem.Aqui estão várias bibliotecas importantes que lidam com a detecção do navegador em dezembro de 2019.
Bowser by lancedikson - 4.065 ★ s - Última atualização em 2 de outubro de 2019 - 4,8KB
* suporta Edge com base no Chromium
Platform.js por bestiejs - 2.550 ★ s - Última atualização 14 de abril de 2019 - 5,9KB
jQuery Browser por gabceb - 504 ★ s - Última atualização 23 de novembro de 2015 - 1,3KB
Detect.js (arquivado) por darcyclarke - 522 ★ s - Última atualização em 26 de outubro de 2015 - 2,9KB
Detecção de navegador (arquivada) por QuirksMode - Última atualização em 14 de novembro de 2013 - 884B
Menções notáveis:
Leitura adicional
fonte
Caso alguém ache isso útil, transformei a resposta de Rob W em uma função que retorna a sequência do navegador em vez de ter várias variáveis flutuando. Como o navegador também não pode realmente mudar sem carregar novamente, fiz o cache do resultado para evitar que ele precise ser resolvido na próxima vez que a função for chamada.
fonte
window.chrome.webstore
foi removida no Chrome 71, portanto, essa abordagem não está mais funcionando.Variante curta
fonte
Aqui está uma versão ajustada para 2016 da resposta de Rob, incluindo o Microsoft Edge e a detecção do Blink:
( editei : atualizei a resposta de Rob acima com essas informações.)
A vantagem dessa abordagem é que ela depende das propriedades do mecanismo do navegador, de modo que abrange até navegadores derivados, como Yandex ou Vivaldi, que são praticamente compatíveis com os principais navegadores cujos mecanismos eles usam. A exceção é o Opera, que conta com o farejamento do agente do usuário, mas hoje (ou seja, versões 15 e seguintes), até o Opera é apenas um shell para o Blink.
fonte
!!window.MSAssertion;
teste não funciona para mim na versão beta do Edge via Área de Trabalho Remota. Retorna false.MSAssertion
truque é ajustado para a versão 25. Mas, como muitos desenvolvedores dependem das VMs, tentarei ajustá-la nesta versão mais antiga. Boa decisão. Obrigado.StyleMedia
objeto (em maiúscula) é específico para o IE e Edge e não parece estar indo a lugar algum.Você pode usar
try
ecatch
usar as diferentes mensagens de erro do navegador. O IE e o edge foram misturados, mas usei a digitação de pato de Rob W (com base neste projeto aqui: https://www.khanacademy.org/computer-programming/i-have-opera/2395080328 ).fonte
Obrigado a todos. Testei os trechos de código aqui nos navegadores recentes: Chrome 55, Firefox 50, IE 11 e Edge 38 e criei a seguinte combinação que funcionou para mim para todos eles. Tenho certeza de que pode ser aprimorado, mas é uma solução rápida para quem precisa:
Ele adiciona uma classe CSS ao HTML, com o nome do navegador.
fonte
Não faço ideia se é útil para alguém, mas aqui está uma variante para deixar o TypeScript feliz.
}
navigator.userAgent
diz a você todos os navegadores possíveis que você possui. Portanto, isso realmente não é confiável, o único caso em que funcionaria seria se o usuário tivesse apenas um navegador.Detectando navegadores em computadores e dispositivos móveis: Edge, Opera, Chrome, Safari, Firefox, IE
Obrigado @nimesh usuário: 2063564
fonte
Há também um método menos "hacky" que funciona para todos os navegadores populares. O Google incluiu uma verificação do navegador na Biblioteca de fechamento . Em particular, dê uma olhada
goog.userAgent
egoog.userAgent.product
. Dessa forma, você também estará atualizado se algo mudar na forma como os navegadores se apresentam (desde que você sempre execute a versão mais recente do compilador de fechamento).fonte
Se você precisar saber qual é a versão numérica de um navegador específico, poderá usar o seguinte snippet. Atualmente, ele informa a versão do Chrome / Chromium / Firefox:
fonte
O UAParser é uma das bibliotecas JavaScript leves para identificar navegador, mecanismo, sistema operacional, CPU e tipo / modelo de dispositivo da string userAgent.
Há uma CDN disponível. Aqui, incluí um código de exemplo para detectar o navegador usando o UAParser.
Agora você pode usar o valor de
result.browser
para programar condicionalmente sua página.Tutorial de origem: como detectar navegador, mecanismo, sistema operacional, CPU e dispositivo usando JavaScript?
fonte
fonte
Isso combina a resposta original de Rob e a atualização do Pilau para 2016
fonte
Aqui você descobre qual navegador está sendo executado.
fonte
Podemos usar os métodos util abaixo
fonte
fonte
Uma linha simples e simples de código JavaScript fornecerá o nome do navegador:
fonte
navigator.userAgent
diz a você todos os navegadores possíveis que você possui. Portanto, isso realmente não é confiável, o único caso em que funcionaria seria se o usuário tivesse apenas um navegador.