5

Hay muchas formas de detectar el navegador en JavaScript.la mejor manera de detectar el navegador en js

Por lo que sé, usando navigator.userAgent o detectando características (como XMLHttpRequest) y así sucesivamente.

¿Alguien me puede decir cuál es la mejor y más efectiva?

+3

Para detectar funciones, use http://www.modernizr.com/ – Idered

Respuesta

16

Si realmente necesita saber lo que navegador que están usando, que en su mayoría tienen que mirar a la cadena userAgent (aunque a veces se puede inferir que el navegador mediante la búsqueda de un par de características oscuras). Solo tenga en cuenta que algunos navegadores permiten al usuario cambiar eso y mentirle. :-)

Pero detectar el navegador está pasado de moda, por buenas razones. En cambio, como dices, quieres detectar las funciones que estás buscando. Esto es más confiable y menos trabajo. El hecho de que IE no sea compatible con addEventListener, por ejemplo, no significa que nunca lo hará (y de hecho lo hace IE9). Entonces, usted detecta la característica en su lugar, lo que a futuro prueba el código.

Aquí hay un ejemplo concreto: supongamos que desea saber (como lo hice para mi place5 jQuery plug-in) si un navegador es compatible con el placeholder attribute. Usted podría usar la detección del navegador y mantener una lista de los navegadores en los cuales las versiones tienen o no soporte, lo cual es complicado y es algo a lo que tiene que seguir recurriendo, etc., etc., o puede hacer esto:

if ("placeholder" in document.createElement("input")) { 
    // The browser supports the attribute 
} 
else { 
    // It doesn't 
} 

... y listo.

Hay un gran conjunto de pruebas de características en this page mantenidas por kangax. También hay una biblioteca llamada Modernizr que ofrece detección de funciones, consultas de medios y más para usted. Si usa jQuery, tiene una función de detección incorporada a través del jQuery.support. Hay una agradable discusión sobre varios aspectos de detección de funciones, consultas de medios, detección de factor de forma (¿tableta, teléfono o PC?) En this article.

+0

¡JUSTO lo que necesitaba! detectar IE9 y abajo. – vsync

+0

@ T.J. Crowder: de acuerdo en optar por la detección de características, ¿pero qué ocurre si intenta detectar el navegador para solucionar un error? ¿Un error que no puedes probar o colgará el navegador? – johntrepreneur

+0

@ T.J. Crowder: además de mi pregunta anterior, necesito encontrar navegadores IE9 a IE7 y una buena manera de hacerlo (en base a sus comentarios sobre detección de características) sería usar comentarios condicionales (compatibles hasta IE9) que establezcan una variable. ¿Derecha? – johntrepreneur

6

No se detectan los navegadores. En su lugar, verifica las características disponibles.

La detección de navegadores se puede solucionar (diablos ... tuve que hacerlo yo mismo cuando uso la opera en gmail hace unos años), pero si el navegador tiene una función, entonces sabes que puedes usarla.

+0

Existen casos en los que debe conocer el navegador específico para poder, por ejemplo, proporcionar un mensaje específico del navegador. –

+0

¿Y qué sería dicho mensaje mágico? –

+0

Bueno, en mi caso, las instrucciones para habilitar webGL en Safari. –

0

Puede probar este http://www.quirksmode.org/js/detect.html

Pero como han dicho otros, usted debe tratar de utilizar la detección de características, pero a veces es simplemente no es suficiente. Por ejemplo, cuando algún rasgo simplemente funciona tan mal/lentamente etc.

Otra gran herramienta para la detección de características es Modernizr

0

la detección de características es un atajo para detectar el navegador. Como ya se mencionó, es más importante saber si una característica es compatible con su navegador o no, en lugar de detectar el navegador. El siguiente enlace le ayudará a diferenciar entre los navegadores en función de los objetos soportados por ellos: http://www.javascriptkit.com/javatutors/objdetect3.shtml

Sin embargo, si sólo se desea detectar el navegador sólo por el bien de saber, es mejor utilizar Navigator en lugar de comprobar varios características al verificar las condiciones.

Cuestiones relacionadas