27

Duplicar posible:
Differentiate IE7 browser and browser in IE7 compatibility modeDetectar el modo de compatibilidad de IE8

No hemos tenido tiempo para probar completamente IE8 con nuestro sistema bastante extenso. También estamos llegando al punto en el que no podemos prohibir el uso de IE8. Nuestros usuarios son obstinados y no terriblemente sofisticados, por lo que no creemos que podamos decirles que utilicen el botón "Modo de compatibilidad". En su lugar, agregaremos la metaetiqueta "IE = EmulateIE7" como una corrección temporal .

El problema es que cuando se utiliza esta etiqueta, el navegador todavía se informa a sí mismo como IE8, que luego es detectado por nuestras páginas y rechazado. Puedo entender por qué la detección del lado del servidor no puede recoger la metaetiqueta (el servidor ya tiene el agente de usuario antes de enviar y procesar la metaetiqueta), pero las comprobaciones del lado del cliente también fallan. Si se hace clic en el botón de modo de compatibilidad en las máquinas cliente, el usuario-agente es IE7, pero no si usamos la metaetiqueta.

Esto significa, entre otras cosas, que tenemos que desactivar la comprobación y, si cometemos un error en algún lugar y olvidamos agregar la metaetiqueta a una página, tendremos páginas rotas.

¿Alguien más ha encontrado esto y ha llegado a un mejor enfoque? ¿No hay forma de detectar que IE8 se está ejecutando en modo de compatibilidad cuando el modo está configurado por la metaetiqueta?

Y, sabemos que hay una escuela válida de pensamiento que deberíamos hacer todas las páginas compatibles con el modo Estándares IE8 pero en nuestro pequeño rincón de la realidad, esa no es una opción viable en este momento (y yo ' Señalaré que no creamos 4 o 5 versiones de IE para las que haya que escribir de una forma no estándar).

+0

Sé que soy un participante reciente, pero después de una buena cantidad de pruebas puedo recomendar encarecidamente este método para la detección de modos de representación de documentos de IE: http://stackoverflow.com/a/13732003/850782 – EpicVoyage

+0

Acabo de añadir un solución que maneja (¿todos los casos?) modo de compatibilidad con la pregunta duplicada recomendada. Fuente de originales: http://stackoverflow.com/a/29288153/2879498 – TylerY86

Respuesta

1

No del todo "detectar el modo de compatibilidad de IE8" pero podría ayudar igual de bien:

Si tiene acceso al servidor mismo, usted puede enviar una cabecera HTTP, echar un vistazo a Mike Ormond's blog about it. La página MSDN para Implementing the Meta Switch on IIS tiene detalles del encabezado y cómo configurarlo/enviarlo.

12

Debe verificar el valor de document.documentMode que tendrá un valor de 8 en modo verdadero IE8 y 7 en modo IE7. La cadena del agente de usuario será idéntica en ambos casos y seguirá indicando IE8. Tenga en cuenta que esta variable de JavaScript solo está disponible en IE8.

+4

La cadena de agente de usuario no es exactamente el mismo para IE7 e IE8 en virtud de vista de compatibilidad, hay un 'Trident 4.0' símbolo adicional en la cadena. Ver aquí: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx –

+1

Esto no funciona en IE9 o IE10? – djangofan

24

IE8 incluye un token tridente en la cadena User-Agent independientemente del modo de compatibilidad.

Ver MSDN para más detalles: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx

Internet Explorer 7 en Windows Vista
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

IE8 en Windows Vista (Vista de compatibilidad)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)

IE8 en Windows Vista
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Tridente/4.0)

+4

Para reiterar que esta es la respuesta correcta: no Trident es IE7, con Trident es IE8 (o posterior). – GlennG

2

El problema es aún más complejo cuando se trata de enlaces que llegan a su sitio desde la emulación IE8 de sitios BLACKLIST como Facebook.

Un enlace compartido en Facebook hace que sus enlaces se abran en una ventana emergente. SI EL "INCLUIR ACTUALIZACIÓN DE BLOQUES" está marcado en la configuración de vista de compatibilidad, que está marcada por defecto, la ventana emergente ve la referencia de la lista negra de Facebook y abre la ventana en modo Lista negra inicialmente. Al detectar en segundo plano para Trident \ 4.0, verá el valor y establecerá el nivel de baja CSS.

Sin embargo, una vez cargado el navegador se cambia del modo de Compat y los cambios en el modo estándar sin refrescante. Por lo tanto, tiene un CSS incorrecto para los modos estándar asignados.

Solución - Forzar el navegador Internet Explorer de modo de compatibilidad. Sí, parece extraño, por qué un usuario puede subir de nivel en su sitio si no es necesario.

Al igual nivel inferior se establece IE = EmulateI7 para forzar el navegador hacia abajo puede agregar IE = EmulateIE8 y obligar al usuario a ver su página en Internet Explorer 8 estándar. este modo incluso elimina su capacidad de seleccionar Vista de compatibilidad y reducir sus necesidades de prueba para ese modo

Cuestiones relacionadas