Tengo 5 complementos / extensiones para FF, Chrome, IE, Opera y Safari.
¿Cómo puedo reconocer el navegador del usuario y redirigir (una vez que se ha hecho clic en un botón de instalación) para descargar el complemento correspondiente?
javascript
browser-detection
FrankC
fuente
fuente
Respuestas:
Buscar en Google para la detección confiable del navegador a menudo da como resultado la comprobación de la cadena del agente de usuario. Este método no es confiable, porque es trivial suplantar este valor.
He escrito un método para detectar navegadores escribiendo pato .
Solo use el método de detección del navegador si es realmente necesario, como mostrar instrucciones específicas del navegador para instalar una extensión. Utilice la detección de funciones cuando sea posible.
Demostración: https://jsfiddle.net/6spj1059/
Análisis de confiabilidad
El método anterior dependía de las propiedades del motor de renderizado (
-moz-box-sizing
y-webkit-transform
) para detectar el navegador. Estos prefijos finalmente se eliminarán, por lo que para hacer que la detección sea aún más sólida, cambié a las características específicas del navegador:document.documentMode
.StyleMedia
constructor. Excluir a Trident nos deja con Edge.InstallTrigger
chrome
objeto global , que contiene varias propiedades, incluido unchrome.webstore
objeto documentado .chrome.webstore
está en desuso y no está definida en versiones recientesSafariRemoteNotification
, que se introdujo después de la versión 7.1, para cubrir todos los Safaris desde 3.0 en adelante.window.opera
existe desde hace años, pero se eliminará cuando Opera reemplace su motor con Blink + V8 (utilizado por Chromium).chrome
objeto está definido (perochrome.webstore
no lo está). Como Opera se esfuerza por clonar Chrome, utilizo la detección de agentes de usuario para este propósito.!!window.opr && opr.addons
se puede usar para detectar Opera 20+ (perenne).CSS.supports()
se introdujo en Blink una vez que Google encendió Chrome 28. Es, por supuesto, el mismo Blink utilizado en Opera.Probado con éxito en:
fuente
window.chrome.webstore
que no está definido allí. No lo he comprobado con las extensiones de Firefox.is.js
mencionado en otra parte funciona en las extensiones de Chrome y Firefox.isSafari
no funciona con Safari 10. Voy a argumentar que esta es una mala solución (no es que tenga una buena). No hay garantía de que muchas de las cosas que verificará no se eliminarán O no serán agregadas por otros navegadores. Todos los sitios que usaban este código para verificar Safari simplemente rompieron con las actualizaciones de macOS Sierra o Safari 10 :(isSafari
no funciona bajo<iframe>
Safari 10.1.2Puede intentar la siguiente forma de verificar la versión del navegador.
Y si necesita conocer solo la versión del navegador IE, puede seguir el siguiente código. Este código funciona bien para la versión IE6 a IE11
fuente
chrome
palabra clave en useragent. ejemplo de uso de 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 )
Sé que puede ser excesivo usar una lib para eso, pero solo para enriquecer el hilo, puedes verificar la forma en que is.js de hacer esto:
fuente
is.js
y verifique cómo lo hacen.Aquí hay varias bibliotecas destacadas que manejan la detección del navegador a partir de diciembre de 2019.
Bowser por lancedikson - 4,065 ★ s - Última actualización 2 de octubre de 2019 - 4.8KB
* admite Edge basado en cromo
Platform.js por bestiejs - 2,550 ★ s - Última actualización 14 de abril de 2019 - 5.9KB
jQuery Browser por gabceb - 504 ★ s - Última actualización 23 de noviembre de 2015 - 1.3KB
Detect.js (Archivado) por darcyclarke - 522 ★ s - Última actualización 26 de octubre de 2015 - 2.9KB
Detección del navegador (Archivado) por QuirksMode - Última actualización 14 de noviembre de 2013 - 884B
Menciones notables:
Otras lecturas
fuente
En caso de que alguien encuentre esto útil, he convertido la respuesta de Rob W en una función que devuelve la cadena del navegador en lugar de tener varias variables flotando. Dado que el navegador tampoco puede cambiar realmente sin volver a cargarlo, lo he guardado en caché del resultado para evitar que tenga que resolverlo la próxima vez que se llame a la función.
fuente
window.chrome.webstore
se eliminó en Chrome 71, por lo que este enfoque ya no funciona.Variante corta
fuente
Aquí hay una versión ajustada de 2016 de la respuesta de Rob, que incluye Microsoft Edge y detección de Blink:
( editar : Actualicé la respuesta de Rob anterior con esta información).
La belleza de este enfoque es que se basa en las propiedades del motor del navegador, por lo que cubre incluso navegadores derivados, como Yandex o Vivaldi, que son prácticamente compatibles con los principales navegadores cuyos motores usan. La excepción es Opera, que se basa en la detección de agentes de usuario, pero hoy (es decir, la versión 15 y posteriores) incluso Opera es solo un shell para Blink.
fuente
!!window.MSAssertion;
prueba no me funciona en la versión beta de Edge a través de Escritorio remoto. Devuelve falso.MSAssertion
truco está ajustado a la versión 25. Pero como muchos desarrolladores confían en las VM, intentaré ajustarlo en esta versión anterior. Buena llamada. Gracias.StyleMedia
objeto (en mayúscula) es específico de IE y Edge y no parece ir a ninguna parte.Puede usar
try
ycatch
usar los diferentes mensajes de error del navegador. IE y edge estaban mezclados, pero utilicé el tipeo de pato de Rob W (basado en este proyecto aquí: https://www.khanacademy.org/computer-programming/i-have-opera/2395080328 ).fuente
Gracias a todos. Probé los fragmentos de código aquí en los navegadores recientes: Chrome 55, Firefox 50, IE 11 y Edge 38 y se me ocurrió la siguiente combinación que funcionó para mí para todos ellos. Estoy seguro de que se puede mejorar, pero es una solución rápida para quien necesite:
Agrega una clase CSS al HTML, con el nombre del navegador.
fuente
No tengo idea si es útil para alguien, pero aquí hay una variante para hacer feliz a TypeScript.
}
navigator.userAgent
te dice que tienes todos los navegadores posibles ... Así que esto realmente no es confiable, el único caso que funcionaría es si el usuario solo tiene un navegador.Detección de navegadores en computadoras de escritorio y dispositivos móviles: Edge, Opera, Chrome, Safari, Firefox, IE
Gracias usuario @nimesh: 2063564
fuente
También hay un método menos "hacky" que funciona para todos los navegadores populares. Google ha incluido una verificación del navegador en su Biblioteca de cierre . En particular, eche un vistazo a
goog.userAgent
ygoog.userAgent.product
. De esta manera, también está actualizado si algo cambia en la forma en que se presentan los navegadores (dado que siempre ejecuta la última versión del compilador de cierre).fuente
Si necesita saber cuál es la versión numérica de algún navegador en particular, puede usar el siguiente fragmento. Actualmente te dirá la versión de Chrome / Chromium / Firefox:
fuente
UAParser es una de las bibliotecas de JavaScript livianas para identificar el navegador, el motor, el sistema operativo, la CPU y el tipo / modelo de dispositivo de la cadena de UserAgent.
Hay un CDN disponible. Aquí, he incluido un código de ejemplo para detectar el navegador usando UAParser.
Ahora puede usar el valor de
result.browser
para programar condicionalmente su página.Tutorial de origen: ¿Cómo detectar el navegador, el motor, el sistema operativo, la CPU y el dispositivo usando JavaScript?
fuente
fuente
Esto combina la respuesta original de Rob y la actualización de Pilau para 2016
fuente
Aquí encontrará qué navegador está ejecutando.
fuente
Podemos usar los siguientes métodos de utilidad
fuente
fuente
Una línea simple y simple de código JavaScript le dará el nombre del navegador:
fuente
navigator.userAgent
te dice que tienes todos los navegadores posibles ... Así que esto realmente no es confiable, el único caso que funcionaría es si el usuario solo tiene un navegador.