125 votos

¿Cómo objetivo solamente Internet Explorer 10 para ciertas situaciones como código CSS específicos de Internet Explorer o específicos de Internet Explorer JavaScript?

¿Cómo objetivo solamente Internet Explorer 10 para ciertas situaciones como código CSS específicos de Internet Explorer o específicos de Internet Explorer JavaScript?

Lo intenté, pero no funciona:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 ignora los comentarios condicionales y utiliza el <html lang="en" class="no-js"> en vez de <html class="no-js ie10" lang="en"> .

97voto

Willem de Wit Puntos2649

He encontrado una solución en este sitio donde alguien había un valioso comentario:

La solución es:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

Es

  • no necesita comentarios condicionales;
  • funciona incluso si el comentario stripping de compresión/procesamiento;
  • no ie10 clase de añadidos de Internet Explorer 11;
  • más probabilidades de funcionar como se pretende con el Internet Explorer 11 se ejecute en Internet Explorer 10 en modo de compatibilidad;
  • no necesita independiente etiqueta de script (sólo puede ser añadido a otro código JavaScript en la cabeza).
  • no necesita de jQuery para probar

88voto

Roni Puntos1628

Yo no usaría JavaScript navigator.userAgent o $.browser (que utiliza navigator.userAgent ) ya que puede ser falseada.

Esta solución CSS centrará en Internet Explorer 9, 10 y 11:

@media screen and (min-width:0\0) { 
    /* Enter CSS here */
}

Movimiento CSS específicos de Internet Explorer en bloques @media

61voto

BoltClock Puntos249668

Internet Explorer 10 no intenta leer los comentarios condicionales más. Esto significa que el tratamiento de los comentarios condicionales igual que cualquier otro navegador: regular comentarios HTML, destinada a ser ignorada completamente. Buscar en el marcado dada en la pregunta como un ejemplo, todos los navegadores incluyendo IE10 será ignorar el comentario partes, resaltado de color gris, totalmente.

Nota, sin embargo, que la compilación condicional en JScript aún es compatible, como se muestra en los comentarios, así como el más reciente respuestas. No va a desaparecer en la versión final, a diferencia jQuery.browser. Y, por supuesto, huelga decir que el agente de usuario de oler sigue siendo tan frágil como siempre, y nunca debe ser utilizada, bajo ninguna circunstancia.

Si usted realmente debe de destino IE10, ya sea el uso de compilación condicional que todavía puede ver el soporte en el futuro cercano, o - mejor aún - el uso de una característica de detección de la biblioteca, tales como Modernizr en lugar de la detección del navegador. Suena bastante incómodo, pero recuerda que como un navegador moderno, muy de acuerdo a los actuales estándares de la Web1, suponiendo que se ha escrito interoperables código que es altamente compatible con los estándares, usted no debe dejar de lado el código especial para IE10, a menos que sea absolutamente necesario, es decir, se supone que debe de parecerse a los de otros navegadores, en términos de comportamiento y de representación.2 Y suena descabellado, dado IE de la historia, pero ¿cuántas veces has esperado Firefox o Chrome para que se comportan de la misma manera para encontrarse con la sorpresa?

Si hago tiene una razón legítima para ser destinadas a algunos de los navegadores, por todos los medios el uso de las alternativas que existen. Sólo estoy diciendo que va a ser mucho más difícil encontrar una razón hoy de lo que solía ser, y es, realmente, simplemente no es algo que usted puede confiar.


1No sólo IE10, pero IE9, e incluso IE8 que maneja la mayoría de la madura CSS2.1 estándar mucho mejor que Chrome, simplemente porque IE8 estaba tan concentrado en el cumplimiento de los estándares (momento en el que CSS2.1 ya era bastante estable, con sólo pequeñas diferencias a partir de hoy la recomendación), mientras que Chrome parece ser poco más que un medio-pulido tech demo de vanguardia pseudo-standards.

2Y yo puede ser parcial cuando digo esto, pero seguro como el infierno. Si el código funciona en otros navegadores, pero no es decir, las probabilidades de que es un problema con su propio código en lugar de IE10 son mucho mejor en comparación a, digamos, hace 3 años, con las versiones anteriores de IE. De nuevo, yo puedo ser parcial, pero seamos realistas: no es usted demasiado? Mira tus comentarios.

54voto

Max Sohrt Puntos598

Tal vez usted puede intentar algunos jQuery como este:

if ($.browser.msie && $.browser.version == 10) {
  $("html").addClass("ie10");
}

Para usar este método debe incluir la biblioteca de migrar de jQuery que esta función fue eliminada de la biblioteca jQuery principal.

Funcionó bastante bien para mí. Pero sin duda no hay reemplazo para comentarios condicionales.

31voto

Paul Sweatte Puntos8668

Un buen lugar para comenzar es la de IE Soporte de los Estándares de Documentación.

Aquí tiene cómo objetivo IE10 en JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Aquí tiene cómo objetivo IE10 en CSS:

@media all and (-ms-high-contrast: none) {
...
}

En caso de que IE11 necesita ser filtrada a través de CSS, ver a otro pregunta: Cómo escribir un CSS hack para IE 11?

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: