Quiero enviar a los usuarios de nuestro sitio web a una página de error si están utilizando una versión Internet Explorer
anterior a la v9. Simplemente no vale la pena nuestro tiempo y dinero para apoyar IE pre-v9
. Los usuarios de todos los otros navegadores que no son IE están bien y no deben ser devueltos. Aquí está el código propuesto:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
// navigate to error page
}
}
¿Este código hará el truco?
Para evitar algunos comentarios que probablemente vendrán en mi camino:
- Sí, sé que los usuarios pueden forjar su
useragent
cadena. No estoy preocupado - Sí, sé que los profesionales de la programación prefieren detectar el soporte de características en lugar del tipo de navegador, pero no creo que este enfoque tenga sentido en este caso. Ya sé que todos los navegadores (relevantes) que no son IE admiten las características que necesito y que no todos los
pre-v9 IE
navegadores lo hacen. Verificar una característica por característica en todo el sitio sería un desperdicio. - Sí, sé que alguien que intente acceder al sitio usando
IE v1
(o> = 20) no establecería 'badBrowser' en verdadero y la página de advertencia no se mostraría correctamente. Ese es un riesgo que estamos dispuestos a correr. - Sí, sé que Microsoft tiene "comentarios condicionales" que pueden usarse para la detección precisa de la versión del navegador. IE ya no admite comentarios condicionales
IE 10
, lo que hace que este enfoque sea absolutamente inútil.
¿Algún otro problema obvio a tener en cuenta?
javascript
internet-explorer
user-agent
browser-detection
Chad Decker
fuente
fuente
Respuestas:
Esta es mi forma preferida de hacerlo. Da el máximo control. (Nota: las declaraciones condicionales solo son compatibles con IE5 - 9.)
Primero configure sus clases ie correctamente
Luego, puede usar CSS para hacer excepciones de estilo o, si lo requiere, puede agregar JavaScript simple:
Gracias a Paul Irish .
fuente
Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
Devuelve la versión de IE o si no, IE devuelve falso
Ejemplo:
o
o
fuente
"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
if (isIE () && isIE () < 9) {
Si nadie más ha agregado un
addEventLister
método y está utilizando el modo de navegador correcto, entonces puede verificar IE 8 o menos conLegacy Internet Explorer y attachEvent (MDN)
fuente
Utiliza comentarios condicionales. Estás intentando detectar usuarios de IE <9 y los comentarios condicionales funcionarán en esos navegadores; en otros navegadores (IE> = 10 y no IE), los comentarios serán tratados como comentarios HTML normales, que es lo que son.
HTML de ejemplo:
También puede hacer esto solo con script, si necesita:
fuente
Para detectar MSIE (v6 - v7 - v8 - v9 - v10 - v11) fácilmente:
fuente
Esta es la forma en que AngularJS busca IE
fuente
Para filtrar de manera confiable IE8 y versiones anteriores, se puede usar la comprobación de objetos globales :
fuente
Detección de la versión de IE mediante la detección de características (IE6 +, los navegadores anteriores a IE6 se detectan como 6, devuelve nulo para los navegadores que no son IE):
Editar: he creado un repositorio bower / npm para su conveniencia: ie-version
Actualizar:
Una versión más compacta se puede escribir en una línea como:
fuente
Esta función devolverá el número de versión principal de IE como un entero, o
undefined
si el navegador no es Internet Explorer. Esto, como todas las soluciones de agente de usuario, es susceptible a la suplantación de agente de usuario (que ha sido una característica oficial de IE desde la versión 8).fuente
console.log(!!match && parseInt(match[1]))
,console.log(parseInt(match[1]))
yconsole.log(match)
, pero ningún resultado con ninguno de ellos.getIEVersion()
. Por ejemplo:if (getIEVersion() < 9) {/* IE 8 or below */}
if (!getIEVersion()) {/* Not IE */}
Detecta IE en JS usando comentarios condicionales
fuente
Esto funciona para mi. Lo uso como una redirección a una página que explica por qué no nos gusta <IE9 y proporciona enlaces a los navegadores que preferimos.
fuente
Su código puede hacer la verificación, pero como pensó, si alguien intenta acceder a su página usando IE v1 o> v19 no obtendrá el error, por lo que podría ser más seguro hacer la verificación con la expresión Regex como este código a continuación:
fuente
Los comentarios condicionales ya no son compatibles con IE a partir de la Versión 10, como se indica en la página de referencia de Microsoft .
luego use:
fuente
version 11
EDITAR: ¡Este código es INCREÍBLE! jaja, da un objeto con todo dentro. La versión es 11 pero docModeIR es igual a 9. ¡Gracias!Para ie 10 y 11:
Puede usar js y agregar una clase en html para mantener el estándar de comentarios condicionales :
O use una lib como bowser:
https://github.com/ded/bowser
O modernizador para la detección de características:
http://modernizr.com/
fuente
Para detectar Internet Explorer 10 | 11, puede usar este pequeño script inmediatamente después de la etiqueta del cuerpo:
En mi caso, uso la biblioteca jQuery cargada en la cabeza.
fuente
Esto ha sido respondido a muerte, pero esto es todo lo que necesitas.
fuente
fuente
Según Microsoft , la siguiente es la mejor solución, también es muy simple:
fuente
Voy a recomendar no reescribir este código por enésima vez. Le recomendaría que use la biblioteca Conditionizr ( http://conditionizr.com/ ) que es capaz de probar versiones específicas de IE, así como otros navegadores, sistemas operativos e incluso la presencia o ausencia de pantallas Retina.
Incluya el código solo para las pruebas específicas que necesita y también obtendrá el beneficio de una biblioteca probada que ha pasado por muchas iteraciones (y que sería fácil de actualizar sin romper su código).
También se combina perfectamente con Modernizr, que puede manejar todos esos casos en los que es mejor probar una capacidad específica en lugar de un navegador específico.
fuente
Me gusta eso:
fuente
Este enfoque para detectar IE combina las fortalezas y evita las debilidades de la respuesta de jKey usando comentarios condicionales y la respuesta de Owen usando agentes de usuario.
El enfoque de Owen puede fallar en IE 5 y 6 (informe 7) y es susceptible a la suplantación de identidad de usuario, pero puede detectar versiones de IE> = 10 (ahora también incluye 12, que es posterior a la respuesta de Owen).
Esto se puede utilizar para establecer clases útiles para su documento que contiene la versión de IE:
Tenga en cuenta que detecta el modo de compatibilidad que se está utilizando, si IE está en modo de compatibilidad. También tenga en cuenta que la versión de IE es principalmente útil para versiones anteriores (<10); las versiones superiores son más compatibles con los estándares y probablemente sea mejor verificar las características utilizando algo como modernizr.js.
fuente
Hice un conveniente subrayado mixin para esto.
fuente
o simplemente
fuente
El script JS más completo que encontré para buscar versiones de IE es http://www.pinlady.net/PluginDetect/IE/ . Toda la biblioteca está en http://www.pinlady.net/PluginDetect/Browsers/ .
Con IE10, las declaraciones condicionales ya no son compatibles.
Con IE11, el agente de usuario ya no contiene MSIE. Además, el uso del agente de usuario no es confiable porque puede modificarse.
Usando el script PluginDetect JS, puede detectar IE y detectar las versiones exactas utilizando un código muy específico y bien diseñado que se dirige a versiones específicas de IE. Esto es muy útil cuando te importa exactamente con qué versión de navegador estás trabajando.
fuente
Me doy cuenta de que llego un poco tarde a la fiesta aquí, pero había estado buscando una forma simple de una línea para proporcionar comentarios sobre si un navegador es IE y qué versión de 10 en adelante era. No he codificado esto para la versión 11, por lo que tal vez se necesitará una pequeña enmienda para eso.
Sin embargo, este es el código, funciona como un objeto que tiene una propiedad y un método y se basa en la detección de objetos en lugar de raspar el objeto del navegador (que tiene fallas masivas ya que puede ser falsificado).
El uso es
isIE.browser
una propiedad que devuelve un valor booleano y se basa en comentarios condicionales del métodoisIE.detectedVersion()
que devuelve un número entre 5 y 10. Supongo que cualquier cosa menor que 6 y que estás en territorio serio de la vieja escuela y harás algo más robusto que un trazador de líneas y cualquier cosa mayor que 10 y estás en un territorio más nuevo. He leído algo sobre IE11 que no admite comentarios condicionales, pero no lo he investigado por completo, quizás para una fecha posterior.De todos modos, como es, y para una línea, cubrirá los conceptos básicos del navegador IE y la detección de versiones. Está lejos de ser perfecto, pero es pequeño y se modifica fácilmente.
Solo como referencia, y si alguien tiene alguna duda sobre cómo implementar esto, entonces el siguiente condicional debería ayudar.
fuente
Detectar IE y sus versiones no podría ser más fácil, y todo lo que necesita es un poco de Javascript nativo / vainilla:
Y esta es una forma de usarlo:
.
Funciona en todas las versiones de IE, incluidas las versiones superiores en Vista / Modo de compatibilidad inferior, y
documentMode
es propiedad de IE.fuente
Si necesita elegir 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
La ventana ejecuta IE10 se actualizará automáticamente a IE11 + y se estandarizará W3C
Hoy en día, no necesitamos admitir IE8-
fuente
fuente
fuente