javascript - navegador - user agent list
¿Cuál es la diferencia entre la detección de características, la inferencia de características y el uso de la cadena de UA (3)
Me hicieron esta pregunta en una entrevista de trabajo recientemente, específicamente en Javascript. Me preguntaba la respuesta correcta.
¿Cuál es exactamente la diferencia entre la feature detection
feature inference
, la feature inference
y el uso de la cadena de User agent
?
Detección de características: realmente comprobando que la característica existe
if(''localStorage'' in window)
Inferencia de características: si x existe, podemos asumir que y existe
if(''localStorage'' in window){
window.sessionStorage.setItem("this-should-exist-too", 1);
}
Si confía en el agente de usuario, entonces tendría que tener un mapa que el navegador X admite la función Y
La detección de características está intentando determinar si existe una característica. Por ejemplo, si el navegador del usuario admite LocalStorage o las API de geolocalización.
if (navigator.geolocation) {
// geolocation possible.. do some stuff
}
La inferencia de características es suponer que, debido a que ha detectado una característica, puede utilizar otras. Por ejemplo, si detecta la API de geolocalización, tal vez asumiría que su usuario está en un navegador moderno, por lo que ahora está disponible LocalStorage. Por lo general, es malo suponer, por lo que es mucho mejor usar la detección de características para cada característica que desea aprovechar y tener una estrategia alternativa en caso de que una característica no esté disponible. Incluso si un usuario tiene un navegador moderno con geolocalización no significa que vaya a permitir que su aplicación lo use, así que haga planes en consecuencia.
La cadena de agente de usuario solo está leyendo la pequeña cadena estúpida que envía cada navegador y luego puede comparar esa cadena con algunos de los navegadores conocidos a los que se dirige. En general, esta es una forma muy antigua de hacer las cosas y es fácil de falsificar, por lo que tendría que tener una razón muy específica para querer ir por esa ruta (tal vez en un entorno de prueba de carga o algo así). Consulte la wiki sobre el tema http://en.wikipedia.org/wiki/User_agent
Se accede a ella en javascript similar a:
navigator.userAgent
La detección de características verifica la existencia de una característica, por ejemplo:
if (window.XMLHttpRequest) {
new XMLHttpRequest();
}
La inference características comprueba una característica como la detección de características, pero usa otra función porque asume que también existirá, por ejemplo:
if (document.getElementsByTagName) {
element = document.getElementById(id);
}
La comprobación de la cadena UA es una práctica antigua y no debe utilizarse más. Continúa cambiando las comprobaciones de UA y nunca se beneficia de las funciones recién implementadas, por ejemplo:
if (navigator.userAgent.indexOf("MSIE 7") > -1){
//do something
}