¿Por qué IE9 cambia al modo de compatibilidad en mi sitio web?


197

Acabo de instalar IE9 beta y en un sitio específico que creé (HTML5) IE9 salta al modo de compatibilidad a menos que lo indique manualmente. He intentado eliminar varias partes del sitio web pero no he cambiado. Incluyendo eliminar todos los CSS incluidos. En algún otro sitio web mío, todo va bien.

Además, no lo configure manualmente porque IE9 recuerda la configuración del usuario y no puede volverlo a automático (o al menos no he encontrado cómo, ni siquiera a través de la navegación privada y el vaciado de caché)

De todas formas. El sitio donde salta al modo de compatibilidad: http://alliancesatwar.com/guide/
Uno donde se muestra correcto: http://geuze.name/basement/ (No puedo publicar más de 1 hipervínculo)

Ambos usan lo mismo doctypey todo. Esos sitios tienen mucho en común (aparte de la apariencia) usando la misma plantilla básica (codificación, metaetiquetas, doctype y el mismo javascript)

¡Sería genial si alguien tuviera una respuesta para mí! Un sitio web HTML5 que se procesa en modo IE7 es bastante ... aburrido.


55
¿Explica "saltos al modo de compatibilidad"? Si ve que la página se actualiza y un globo que dice que IE ha actualizado esta página en la Vista de compatibilidad debido a un problema, esto significa que ha encontrado un error de IE llamado "afirmación dura" que es similar a un bloqueo en el motor de renderizado . Estamos interesados ​​en encontrarlos y arreglarlos; presente un error en connect.microsoft.com/ie . ¡Gracias!
EricLaw

Respuestas:


263

Funciona en IE9 documentMode para mí.

Sin un X-UA-Compatibleencabezado / meta para establecer un modo de documento explícito, obtendrá un modo basado en:

  • si el usuario ha hecho clic en el botón 'vista de compatibilidad' en ese dominio anteriormente;
  • quizás también si esto ha sucedido automáticamente debido a algún otro contenido en el sitio que causa que el renderizador de IE8 / 9 se bloquee y vuelva al antiguo renderizador;
  • si el usuario ha optado por poner todos los sitios en vista de compatibilidad por defecto;
  • si IE cree que el sitio está en su intranet y, por lo tanto, está predeterminado en la vista de compatibilidad;
  • si el sitio en cuestión está en la propia lista de sitios web de Microsoft que requieren una vista de compatibilidad.

Puede cambiar esta configuración desde 'Herramientas -> Configuración de vista de compatibilidad' desde el menú IE. Por supuesto, ese menú ahora está oculto furtivamente, por lo que no lo verá hasta que presione Alt.

Como autor del sitio, si está seguro de que su sitio cumple con los estándares (se ve bien en otros navegadores y utiliza la detección de características para decidir qué soluciones alternativas usar), sugiero usar:

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

o el encabezado HTTP:

X-UA-Compatible: IE=Edge

para obtener el último procesador independientemente de la versión de IE que esté en uso.


79
Nota importante: si IE 9 está configurado para mostrar siempre los sitios de Intranet en modo de compatibilidad, ni la etiqueta meta ni el encabezado HTTP lo anularán.
Jacob

29
Como Jacob menciona, IE puede mostrar de manera predeterminada todos los sitios locales / intranet para que estén en modo de compatibilidad. Presione alt -> Configuración de Vista de compatibilidad de herramientas y asegúrese de no tener la casilla marcada.
Cory Mawhorter

30
La metaetiqueta solo funcionó para mí cuando la puse justo después de <head> (vea también la respuesta a continuación). Cuando lo puse más abajo dentro del elemento <head>, no funcionó (todavía recibí la página rota).
Boris van Schooten

13
@ Jacob: Eso es un poco engañoso. Sí, estará en modo de navegador de compatibilidad y no hay salida. Pero aún puede usar el encabezado HTTP para establecer el modo de documento en la versión de IE que funcione mejor para su sitio. IE = Edge siempre debe darle el último motor de renderizado. Entonces, incluso si técnicamente está en modo de compatibilidad, puede hacer que sus páginas se representen como en modo normal. Corríjame si me equivoco, pero al menos nuestro sitio de Intranet funciona exactamente así (incluso con la configuración "Mostrar sitios de intranet en vista de compatibilidad" marcada).
mkataja

77
@ BorisvanSchooten: No sé si esta es la razón, pero las <meta>etiquetas deben estar dentro de los primeros 512 bytes de un archivo HTML procesado. Digo "procesado" porque puedes tener todo tipo de PHP ahí arriba, pero el código renderizado es lo importante. Llegué a donde puse todos mis comentarios sobre <meta>debajo de las <meta>etiquetas, para no romper el requisito.
doubleJ

33

pongo

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

lo primero después

<head>

(Lo leí en alguna parte, no recuerdo)

¡No podía creer que funcionó!


Tienes que cerrar la pestaña y abrir una nueva pestaña, ¿lo intentaste?
Zeb

1
Dijo "no" no "no";)
Nathan JB

14
+1, esta es una nota muy valiosa . Si tiene <script>s dentro <head>antes de esta metadeclaración, se ignorará (IE = edge).
jakub.g

22

Para forzar a IE a renderizar en modo estándar IE9, debe usar

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Algunas condiciones pueden hacer que IE9 salte a los modos de compatibilidad. Por defecto, esto puede ocurrir en sitios de intranet.


Funciona en el otro sitio web. Entonces eso no debería ser. Además, esa metaetiqueta es mala ya que tendrías que actualizarla manualmente cada vez que hay una nueva versión de IE.
René

2
Lo siento, no puedo solucionar tu problema. Sin embargo, he editado mi respuesta para usar IE=edgeen su lugar, que invoca el uso del último motor disponible, siempre.
Delan Azabani

Su suposición es incorrecta. Las demostraciones especifican X-UA-Compatible para evitar que IE muestre el botón Vista de compatibilidad, ya que si el usuario lo presiona, el contenido del sitio no funcionaría correctamente.
EricLaw

@ReneGeuze, te equivocaste. Edge siempre se refiere a la última versión de IE.
neoswf

@DelanAzabani mi portal de intranet cambia al modo de compatibilidad, incluso agregué una metaetiqueta como sugeriste. sugiera cómo podría resolverse y permanecer en el modo estándar ejemplo: IE 8, compatibilidad con IE 8, entonces solo quiero IE 8.
dsi

6

He publicado este comentario en un hilo separado de StackOverflow, pero pensé que valía la pena repetirlo aquí:

Para nuestra aplicación interna ASP.Net, agregar la etiqueta "Compatible con X-UA" en la página web, en web.config o en el código subyacente no hizo absolutamente ninguna diferencia.

Lo único que funcionó para nosotros fue desactivar manualmente esta configuración en IE8:

ingrese la descripción de la imagen aquí

(Suspiro.)

Este problema solo parece suceder con IE8 e IE9 en sitios de intranet. Los sitios web externos funcionarán bien y usarán la versión correcta de IE8 / 9, pero para los sitios web internos, IE9 de repente decide que en realidad es IE7 y no tiene soporte para HTML 5.

No, tampoco entiendo esta lógica.

Mi solución reacia ha sido probar si el navegador es compatible con HTML 5 (creando un lienzo y probando si es válido), y mostrando este mensaje al usuario si no es válido:

ingrese la descripción de la imagen aquí

No es particularmente fácil de usar, pero hacer que el usuario apague esta configuración molesta parece ser la única forma de permitirles ejecutar correctamente las aplicaciones web HTML 5 internas.

O haga que los usuarios usen Chrome. ;-)


1

El sitio en http://www.HTML-5.com/index.html tiene la metaetiqueta compatible con X-UA pero aún entra en la Vista de compatibilidad como lo indica el icono de "página rota" en la barra de direcciones. ¿Cómo se obtiene la opción de menú para forzar a IE 9 (versión final 9.0.8112.16421) a representar una página en modo estándar? Intenté hacer clic derecho en el icono de la página rota, así como en el truco de la tecla "Alt" para mostrar las opciones de menú adicionales mencionadas por Rene Geuze, pero no funcionaron.


44
Elimine el comentario condicional de IE alrededor del meta. Está sirviendo la página como application/xhtml+xml, por lo que se utilizan reglas de análisis XML; XML no admite comentarios condicionales. En cualquier caso, no tiene ningún sentido; el navegador debe elegir un modo antes de poder decidir qué comentarios condicionales interpretar.
bobince

1

Como un aparte en los sitios web más modernos, si está usando declaraciones condicionales en su etiqueta html según el estándar, esto por alguna razón causará que ie9 cambie por defecto al modo de compatibilidad. La solución aquí es mover sus declaraciones condicionales fuera de la etiqueta html y agregarlas a la etiqueta del cuerpo, en otras palabras, fuera de la sección de cabecera. De esa manera, aún puede usar esas clases en su hoja de estilo para apuntar a navegadores más antiguos.


0

Luce bien para mi:

texto alternativo

¿Estás seguro de que no lo hiciste en la configuración a nivel mundial o algo así? Esta es una instalación limpia de la versión beta en Windows 7. Las herramientas del desarrollador informan que la página está configurada de manera predeterminada en el modo estándar IE9.


Tenía más de 1 informe de este error. Aunque tal vez tenga que ver con el directorio base ( alliancesatwar.com ) que también muestra todos los subdirectorios en modo de compatibilidad. Pero luego tengo la pregunta, ¿qué es lo que en la raíz del sitio web hace que IE procese el sitio web en modo de compatibilidad? Entonces, al menos esta guía está codificada correctamente. Eso espero entonces.
René

@Rene Strange, acabo de reproducirlo haciendo clic en el enlace Guía de la página de inicio. Pero esto solo sucedió una vez, y después de algunos intentos todavía tengo que reproducir esto, solo esa única vez
Yi Jiang,

0

Recientemente tuve que resolver este problema y esto es lo que hice:

En primer lugar, esta solución consiste en ajustar el servidor Apache.

La segunda idea principal es que hay un error en el IE9, lo que significa que la metaetiqueta no funcionará, en lugar de esta solución, intente esto

  • encuentra / abre tu httpd.conf
  • descomentar / o agregar la siguiente línea

    LoadModule headers_module modules/mod_headers.so
  • agregue las siguientes líneas

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • guardar / reiniciar su servidor Apache,

  • navegue a su página con IE9, use herramientas como wireshark o fiddler o use herramientas de desarrollador de IE para verificar que el encabezado esté allí
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.