Obtenga la versión IE del User-Agent
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
Cómo funciona: La cadena de agente de usuario para todas las versiones de IE incluye una parte "MSIE espacio de la versión " o "Trident otro texto rv espacio-o-de colon versión ". Sabiendo esto, tomamos el número de versión de una String.match()
expresión regular. Se try-catch
usa un bloque para acortar el código; de lo contrario, tendríamos que probar los límites de la matriz para navegadores que no sean IE.
Nota: El agente de usuario puede ser falsificado u omitido, a veces sin querer si el usuario ha configurado su navegador en un "modo de compatibilidad". Aunque esto no parece ser un gran problema en la práctica.
Obtenga la versión IE sin el agente de usuario
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
Cómo funciona: cada versión de IE agrega soporte para características adicionales que no se encuentran en versiones anteriores. Entonces podemos probar las características de arriba hacia abajo. Sin embargo, aquí se usa una secuencia ternaria por brevedad, if-then
y las switch
declaraciones funcionarían igual de bien. La variable ie
se establece en un número entero 5-11, o 1 para más antiguo, o 99 para más reciente / no IE. Puede establecerlo en 0 si solo desea probar IE 1-11 exactamente.
Nota: La detección de objetos puede romperse si su código se ejecuta en una página con scripts de terceros que agregan polyfills para cosas como document.addEventListener
. En tales situaciones, el agente de usuario es la mejor opción.
Detecta si el navegador es moderno
Si solo le interesa saber si un navegador admite o no la mayoría de los estándares HTML 5 y CSS 3, puede suponer razonablemente que IE 8 y versiones inferiores siguen siendo las aplicaciones problemáticas principales. Prueba parawindow.getComputedStyle
le proporcionarán una combinación bastante buena de navegadores modernos (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 mejora enormemente el soporte de estándares, pero la animación CSS nativa requiere IE 10.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );