IE10 se procesa en modo IE7. ¿Cómo forzar el modo de estándares?

Respuestas:

244

Internet Explorer supone que la mayoría de las páginas web se escribieron para apuntar a versiones anteriores de IE y analiza el doctype, metaetiquetas y HTML para determinar el mejor modo de compatibilidad (a veces incorrectamente). Incluso con un doctype HTML5, IE seguirá colocando su sitio web en modo de compatibilidad si es un sitio de intranet.

Para asegurarse de que su sitio web siempre use el último modo estándar, puede asegurarse de que Display intranet sites in Compatiblyesté apagado. Sin embargo, debe hacer esto en cada máquina local del servidor web (las instrucciones están a continuación).

Alternativamente, y mejor aún, puede usar el X-UA-Compatibleencabezado para desactivar esto desde el servidor. ¡Es importante tener en cuenta que usar la metaetiqueta no funcionará!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

En todo MSDN se menciona que el uso de un encabezado de host o una metaetiqueta debería anular incluso los sitios de intranet. El artículo Comprender los modos de compatibilidad en Internet Explorer 8 dice lo siguiente.

Una gran cantidad de sitios web empresariales internos están optimizados para Internet Explorer 7, por lo que esta excepción predeterminada conserva esa compatibilidad. ... De nuevo, si se usa una Metaetiqueta o un encabezado http para establecer un modo de compatibilidad con el documento, anulará esta configuración.

Sin embargo, en la práctica esto no funcionará, usar un encabezado de host es la única opción que funciona. La sección de comentarios del artículo también muestra numerosos ejemplos de este problema exacto.

El uso de una etiqueta Meta también tiene varios otros problemas, como ignorar la etiqueta si no está directamente debajo de la <head>etiqueta o si hay demasiados datos antes (4k). También puede provocar que el documento se vuelva a analizar en algunas versiones de IE, lo que ralentizará el procesamiento. Puede leer más sobre estos temas en el artículo de MSDN Mejores prácticas: ponga su HEAD en orden .

Agregar el encabezado compatible con X-UA

Si está utilizando .NET e IIS, puede agregar esto a web.config, también podría hacerlo mediante programación:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Si no está utilizando IIS, es fácil hacerlo en cualquier idioma. Por ejemplo, aquí se explica cómo hacerlo en PHP:

header('X-UA-Compatible: IE=edge');

Mientras el X-UA-Compatibleencabezado esté presente con el doctype HTML5, un sitio siempre se ejecutará en el modo estándar más reciente.

Desactivar la Vista de compatibilidad
Puede ser útil desactivar la Vista de compatibilidad. Para hacerlo, desmarque Display all intranet sites in compatibility viewen la Configuración de Vista de compatibilidad.

Configuración de la vista de compatibilidad

Puede mencionar esto presionando Altpara obtener el menú.

ingrese la descripción de la imagen aquí

Editar Esta respuesta también pertenece a IE9.

Daniel Little
fuente
Disculpe mi ignorancia, pero ¿cómo llegar a esta hoja de configuración? Verifiqué la configuración de Internet Explorer, hice clic derecho en la vista de compatibilidad en la barra de direcciones, nada.
firedev
2
@Nick use altpara abrir la barra de herramientas, está debajo de herramientas -> configuración de vista de compatibilidad
Daniel Little
Oh, gracias, parece que eso lo resolvió. Hace que uno se pregunte por qué hicieron eso en absoluto.
firedev
25
+1000;). SO debería obligar a cada OP a ver esta respuesta, cuando tengan una etiqueta [IE] y una palabra "compatible" en su pregunta, incluso antes de que realmente publiquen esa pregunta.
Teemu
2
Intenté agregar la sección de encabezados personalizados al proyecto web.config. Parece que la configuración no anula la configuración de IE para usar la vista de compatibilidad para sitios de intranet.
DomenicDatti
25

Esto funciona para mi ...

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
JGilmartin
fuente
11
Nota: como dice Lavinski anteriormente, "la metaetiqueta no hace nada para los sitios de intranet".
Nathan
2
Por lo que vale, para un sitio web alojado (sitio no intranet) que tiene la X-UA-Compatiblemetaetiqueta, pero que aún no activa el modo de documento de los estándares IE10 como predeterminado de página, descubrí que si la metaetiqueta se encuentra debajo de las etiquetas de script o simplemente demasiado lejos de la parte superior del <head>en el árbol DOM, IE10 llora y establece el modo de documento a los estándares IE8. Por lo tanto, mantenga su IE=edgemetaetiqueta cerca de la <title>etiqueta. No siempre es una solución simple para los sitios de Wordpress cuando no está codificado en el archivo de plantilla de encabezado. No estoy seguro si a IE11 le importa dónde está la metaetiqueta, pero espero que esto sea útil para alguien.
purefusion
1
Para las copias ciegas y los pasteles como yo, falta la etiqueta de cierre. . <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
John Newman
Solo necesita cerrar la metaetiqueta si está utilizando el doctype XHTML
Andy Brudtkuhl
2
También esta etiqueta debe ser la primera etiqueta dentro de <head>
Chris Gunawardena
10

Intenta agregar la siguiente etiqueta a la cabeza

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
Jeow Li Huan
fuente
55
Eso debería ser IE=Edgeen su lugar
Daniel Little
1
Pero existe el riesgo de que las versiones futuras de IE
hagan
77
No, eso no es un riesgo si sigues las especificaciones, no ves gente haciendo eso por Chrome.
Daniel Little, el
1
Esta etiqueta debe ser la primera etiqueta dentro de <head>
Chris Gunawardena
1
La edición de esta respuesta demuestra por qué esta no es una buena idea. La respuesta aceptada es la mejor solución.
David Granado
2

La metaetiqueta no hace nada para los sitios de intranet y mi problema fue la representación de IE10 en el modo de compatibilidad de IE10. Lo que abordó el problema para mí fue llevar la respuesta de @ Jeow más allá y usar ese valor en un encabezado http al agregar lo siguiente web.configen IIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Para fines de IE, los sitios de intranet incluyen sitios públicos que no se enrutan a externos; por ejemplo, un empleado de Stackoverflow que trabaja desde la oficina probablemente vería stackoverflow.com en modo de compatibilidad.

ov
fuente
1

Funcionó perfectamente para mí cuando hice lo siguiente:

En http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

Se utilizó el ejemplo exacto que proporcionan en el primer cuadro (se agregaron los que faltan </html> en la parte inferior), lo abrí en IE10 y los estándares se forzaron, creo que es posible que necesites contenido real en el html para forzar estándares no seguros.

Mi sugerencia sería reemplazar su código vacío con contenido real (algo simple) y ver qué hace.

ZacNespral21
fuente