Quería usar la biblioteca Modernizr JS para detectar algunas propiedades del navegador para determinar qué contenido mostrar o no mostrar.
Tengo una aplicación llamada Pano2VR que genera HTML5 y SWF. Necesito HTML5 para usuarios de dispositivos iOS.
Sin embargo, IE no muestra esta salida "HTML5" en absoluto. Parece que su salida usa transformaciones CSS3 3D y WebGL, una o más aparentemente no son compatibles con IE9.
Entonces, para esos usuarios, necesito mostrar la versión Flash. Estaba planeando usar un IFRAME y pasar el SRC a través de un script o documento de Modernizr. Escriba el código IFRAME correcto según el navegador.
Todo lo cual lleva a cómo utilizo Modernizr para detectar simplemente IE o no IE? ¿O detectar transformaciones CSS 3D?
¿O hay otra manera de hacer esto?
fuente
Browser identification based on detecting the user agent string is unreliable and is not recommended, as the user agent string is user configurable.
Puede usar Modernizr para detectar simplemente IE o no, comprobando el soporte de animación SVG SMIL .
Si ha incluido la detección de características SMIL en su configuración de Modernizr, puede usar un enfoque CSS simple y apuntar a la clase .no-smil que Modernizr aplica al elemento html :
html.no-smil { /* IE/Edge specific styles go here - hide HTML5 content and show Flash content */ }
Alternativamente, puede usar Modernizr con un enfoque simple de JavaScript, así:
if ( Modernizr.smil ) { /* set HTML5 content */ } else { /* set IE/Edge/Flash content */ }
Tenga en cuenta que IE / Edge algún día podría admitir SMIL , pero actualmente no hay planes para hacerlo.
Como referencia, aquí hay un enlace a la tabla de compatibilidad de SMIL en caniuse.com .
fuente
Detectando transformaciones CSS 3D
Modernizr puede detectar transformaciones CSS 3D , sí. La veracidad de
Modernizr.csstransforms3d
le dirá si el navegador los admite.El enlace anterior le permite seleccionar qué pruebas incluir en una compilación de Modernizr, y la opción que está buscando está disponible allí.
Detectando IE específicamente
Alternativamente , como respondió el usuario 356990, puede usar comentarios condicionales si está buscando solo IE e IE. En lugar de crear una variable global, puede usar el
<html>
truco de comentarios condicionales de HTML5 Boilerplate para asignar una clase:<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
Si ya ha inicializado jQuery, puede consultar con
$('html').hasClass('lt-ie9')
. Si necesita verificar en qué versión de IE se encuentra para poder cargar condicionalmente jQuery 1.xo 2.x, puede hacer algo como esto:myChecks.ltIE9 = (function(){ var htmlElemClasses = document.querySelector('html').className.split(' '); if (!htmlElemClasses){return false;} for (var i = 0; i < htmlElemClasses.length; i += 1 ){ var klass = htmlElemClasses[i]; if (klass === 'lt-ie9'){ return true; } } return false; }());
Nota: los comentarios condicionales de IE solo se admiten hasta IE9 inclusive. Desde IE10 en adelante, Microsoft fomenta el uso de la detección de funciones en lugar de la detección del navegador.
Cualquiera que sea el método que elija, lo probará con
if ( myChecks.ltIE9 || Modernizr.csstransforms3d ){ // iframe or flash fallback }
No te lo tomes
||
literalmente, por supuesto.fuente
Si está buscando una versión JS (usando una combinación de detección de características y rastreo de UA) de lo que solía hacer html5 boilerplate:
var IE = (!! window.ActiveXObject && +(/msie\s(\d+)/i.exec(navigator.userAgent)[1])) || NaN; if (IE < 9) { document.documentElement.className += ' lt-ie9' + ' ie' + IE; }
fuente
Bueno, después de investigar más sobre este tema, terminé usando la siguiente solución para apuntar a IE 10+. Como IE10 y 11 son los únicos navegadores que admiten la consulta de medios -ms-high-contrast, esa es una buena opción sin JS:
@media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { /* IE10+ specific styles go here */ }
Funciona perfectamente.
fuente
Los trucos CSS tienen una buena solución para apuntar a IE 11:
http://css-tricks.com/ie-10-specific-styles/
.NET y Trident / 7.0 son exclusivos de IE, por lo que se pueden utilizar para detectar la versión 11 de IE.
El código luego agrega la cadena de agente de usuario a la etiqueta html con el atributo 'data-useragent', por lo que IE 11 puede ser dirigido específicamente ...
fuente
Necesitaba detectar IE frente a casi todo lo demás y no quería depender de la cadena UA. Descubrí que usar
es6number
con Modernizr hizo exactamente lo que quería. No me preocupa mucho este cambio, ya que no espero que IE admita el Número ES6. Así que ahora sé la diferencia entre cualquier versión de IE vs Edge / Chrome / Firefox / Opera / Safari.Más detalles aquí: http://caniuse.com/#feat=es6-number
Tenga en cuenta que no me preocupan mucho los falsos negativos de Opera Mini. Usted podría ser.
fuente
Puede usar el
< !-- [if IE] >
truco para establecer una variable js global que luego se prueba en su código js normal. Un poco feo pero me ha funcionado bien.fuente