IE10 + ya no admite etiquetas de detección de navegador para identificar un navegador.
Para detectar IE10, estoy usando JavaScript y ms
se define una técnica de prueba de capacidad para detectar ciertos estilos con prefijos como msTouchAction
y msWrapFlow
.
Quiero hacer lo mismo para IE11, pero supongo que todos los estilos de IE10 también serán compatibles con IE11. ¿Alguien puede ayudarme a identificar solo los estilos o capacidades de IE11 que podría usar para diferenciar los dos?
Información extra
- No quiero usar la detección de tipo de agente de usuario porque es muy irregular y se puede cambiar, y creo que he leído que IE11 está tratando de ocultar intencionalmente el hecho de que es Internet Explorer.
- Para ver un ejemplo de cómo funciona la prueba de capacidad de IE10, utilicé este JsFiddle (no el mío) como base para mis pruebas.
- También espero muchas respuestas de "Esto es una mala idea ...". Una de mis necesidades para esto es que IE10 afirma que es compatible con algo, pero está muy mal implementado, y quiero poder diferenciar entre IE10 e IE11 + para poder seguir adelante con un método de detección basado en capacidades en el futuro.
- Esta prueba se combina con una prueba de Modernizr que simplemente hará que algunas funciones "retrocedan" a un comportamiento menos glamoroso. No estamos hablando de funcionalidad crítica.
TAMBIÉN ya estoy usando Modernizr, pero aquí no ayuda. Necesito ayuda para encontrar una solución a mi pregunta claramente formulada, por favor.
Respuestas:
A la luz del hilo en evolución, he actualizado lo siguiente:
IE 6
o
IE 7
o
IE 6 y 7
o
o
IE 6, 7 y 8
IE 8
o
Solo modo estándar IE 8
IE 8,9 y 10
IE 9 solamente
IE 9 y superior
IE 9 y 10
IE 10 solamente
IE 10 y superior
o
El uso de
-ms-high-contrast
medios que MS Edge no será el objetivo, ya que Edge no es compatible-ms-high-contrast
.IE 11
Alternativas de JavaScript
Modernizr
Selección de agente de usuario
Javascript:
Agrega (por ejemplo) lo siguiente al
html
elemento:Permitir selectores de CSS muy específicos, por ejemplo:
Nota
Si es posible, identifique y solucione cualquier problema sin hacks. Apoye la mejora progresiva y la degradación elegante . Sin embargo, este es un escenario de 'mundo ideal' que no siempre se puede obtener, como tal, lo anterior debería ayudar a proporcionar algunas buenas opciones.
Atribución / Lectura esencial
fuente
clip: auto\9;
aún se interpreta comoclip: auto;
en IE 11. De alguna manera esto no se ignora ...@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .relevant_selectors_for_situation {property:value;} }
encontré en mediacurrent.com/blog/…-ms-high-contrast: active
podría ser algo para evitar porque, de acuerdo con las especificaciones de MS, en realidad apuntará a los usuarios de temas de alto contraste en Edge con sus reglas de IE 10/11. En la página a la que se vincula esta respuesta,-ms-high-contrast
en realidad dice que solo el-ms-high-contrast: none
valor ya no es compatible. Creo que nadie menciona esto porque la mayoría de la gente no tiene habilitado el modo de alto contraste y la mayoría de la gente no usa Edge. Pero aún así, hay alguien que tiene esa configuración y esto probablemente no sea bueno para ellos.Para apuntar solo a IE10 e IE11 (y no a Edge):
fuente
Así que al final encontré mi propia solución a este problema.
Después de buscar en la documentación de Microsoft , logré encontrar un nuevo estilo único de IE11
msTextCombineHorizontal
En mi prueba, verifico los estilos IE10 y si coinciden positivamente, verifico el estilo solo IE11. Si lo encuentro, entonces es IE11 +, si no lo encuentro, entonces es IE10.
Ejemplo de código: detectar IE10 e IE11 mediante pruebas de capacidad CSS (JSFiddle)
Mostrar fragmento de código
/** Target IE 10 with JavaScript and CSS property detection. # 2013 by Tim Pietrusky # timpietrusky.com **/ // IE 10 only CSS properties var ie10Styles = [ 'msTouchAction', 'msWrapFlow', 'msWrapMargin', 'msWrapThrough', 'msOverflowStyle', 'msScrollChaining', 'msScrollLimit', 'msScrollLimitXMin', 'msScrollLimitYMin', 'msScrollLimitXMax', 'msScrollLimitYMax', 'msScrollRails', 'msScrollSnapPointsX', 'msScrollSnapPointsY', 'msScrollSnapType', 'msScrollSnapX', 'msScrollSnapY', 'msScrollTranslation', 'msFlexbox', 'msFlex', 'msFlexOrder']; var ie11Styles = [ 'msTextCombineHorizontal']; /* * Test all IE only CSS properties */ var d = document; var b = d.body; var s = b.style; var ieVersion = null; var property; // Test IE10 properties for (var i = 0; i < ie10Styles.length; i++) { property = ie10Styles[i]; if (s[property] != undefined) { ieVersion = "ie10"; createEl("IE10 style found: " + property); } } // Test IE11 properties for (var i = 0; i < ie11Styles.length; i++) { property = ie11Styles[i]; if (s[property] != undefined) { ieVersion = "ie11"; createEl("IE11 style found: " + property); } } if (ieVersion) { b.className = ieVersion; $('#versionId').html('Version: ' + ieVersion); } else { createEl('Not IE10 or 11.'); } /* * Just a little helper to create a DOM element */ function createEl(content) { el = d.createElement('div'); el.innerHTML = content; b.appendChild(el); } /* * List of IE CSS stuff: * http://msdn.microsoft.com/en-us/library/ie/hh869403(v=vs.85).aspx */
body { font: 1.25em sans-serif; } div { background: red; color:#fff; padding: 1em; } .ie10 div { background: green; margin-bottom:.5em; } .ie11 div { background: purple; margin-bottom:.5em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <h1>Detect IE10 and IE11 by CSS Capability Testing</h1> <h2 id="versionId"></h2>
Actualizaré el ejemplo de código con más estilos cuando los descubra.
NOTA: Es casi seguro que esto identificará a IE12 e IE13 como "IE11", ya que esos estilos probablemente seguirán adelante. Agregaré más pruebas a medida que se implementen nuevas versiones y, con suerte, podré confiar nuevamente en Modernizr.
Estoy usando esta prueba para el comportamiento alternativo. El comportamiento alternativo es simplemente un estilo menos glamoroso, no tiene una funcionalidad reducida.
fuente
if (document.documentMode === 11) { ... }
? A menos, por supuesto, que desee utilizar la propiedad CSS en una@supports
regla at (que aún no es compatible con IE, por cierto).Esto parece funcionar:
https://www.limecanvas.com/css-hacks-for-targeting-ie-10-and-above/
fuente
Puede escribir su código IE11 normalmente y luego usar
@supports
y verificar una propiedad que no sea compatible con IE11, por ejemplogrid-area: auto
.A continuación, puede escribir los estilos de su navegador moderno dentro de este. IE no admite la
@supports
regla y usará los estilos originales, mientras que estos se anularán en los navegadores modernos que lo admitan@supports
.fuente
@supports
en absoluto, por lo que ignora cualquier cosa en el@supports
bloque. Por lo tanto, puede poner cualquier cosa en el condicional @supports (por ejemplo@supports (display: block)
) e IE11 aún lo omitirá.Aquí hay una respuesta para 2017 en adelante, donde probablemente solo le interese distinguir <= IE11 de> IE11 ("Edge"):
@supports not (old: ie) { /* code for not old IE here */ }
Ejemplo más demostrativo:
body:before { content: 'old ie'; } /**/@supports not (old: ie) { body:before { content: 'not old ie'; } /**/}
Esto funciona porque IE11 ni siquiera es compatible
@supports
, y todas las demás combinaciones de navegador / versión relevantes sí lo hacen.fuente
Esto funcionó para mi
Y luego, en el archivo css, las cosas con el prefijo
¿Cuándo estará listo este navegador para morir?
fuente
Prueba esto:
fuente
Eche un vistazo a este artículo: CSS: Selectores de agentes de usuario
Básicamente, cuando usa este script:
Ahora puede usar CSS para apuntar a cualquier navegador / versión.
Entonces, para IE11 podríamos hacer esto:
VIOLÍN
fuente
rv:11.0
en su cadena de agente de usuario.Utilice las siguientes propiedades:
fuente
Debe usar Modernizr, agregará una clase a la etiqueta del cuerpo.
además:
Tenga en cuenta que IE11 todavía está en versión preliminar y el agente de usuario puede cambiar antes del lanzamiento.
La cadena de agente de usuario para IE 11 es actualmente esta:
Lo que significa que puede simplemente probar, para las versiones 11.xx,
fuente
Quizás Layout Engine v0.7.0 sea una buena solución para su situación. Utiliza la detección de funciones del navegador y puede detectar no solo IE11 e IE10, sino también IE9, IE8 e IE7. También detecta otros navegadores populares, incluidos algunos navegadores móviles. Agrega una clase a la etiqueta html, es fácil de usar y funciona bien en algunas pruebas bastante profundas.
http://mattstow.com/layout-engine.html
fuente
Si está utilizando Modernizr , puede diferenciar fácilmente entre IE10 e IE11.
IE10 no admite la
pointer-events
propiedad. IE11 lo hace. ( caniuse )Ahora, según la clase que inserta Modernizr, podría tener el siguiente CSS:
fuente
Puede usar js y agregar una clase en html para mantener el estándar de comentarios condicionales :
O use una biblioteca como bowser:
https://github.com/ded/bowser
O modernizr para la detección de características:
http://modernizr.com/
fuente
Detectar IE y sus versiones en realidad es extremadamente fácil, al menos extremadamente intuitivo:
.
De esta manera, también está obteniendo versiones altas de IE en Modo / Vista de compatibilidad. A continuación, es cuestión de asignar clases condicionales:
fuente
Puedes probar esto:
fuente
Me encontré con el mismo problema con un formulario de gravedad (WordPress) en IE11. El estilo de columna del formulario "display: inline-grid" rompió el diseño; la aplicación de las respuestas anteriores resolvió la discrepancia.
fuente
Da un paso atrás: ¿por qué estás intentando detectar "Internet Explorer" en lugar de "Mi sitio web necesita hacer X? ¿Este navegador es compatible con esa función? Si es así, buen navegador. Si no, debo advertir al usuario".
Debería acceder a http://modernizr.com/ en lugar de continuar con lo que está haciendo.
fuente