2010-08-10 21 views
327

Estoy trabajando para un cliente que fuerza el modo de compatibilidad en todos los sitios de la intranet. Me preguntaba si hay una etiqueta que pueda poner en mi HTML que fuerce el modo de compatibilidad.Desactivar el modo de compatibilidad de IE con las etiquetas

+0

Creo que la respuesta que está buscando está aquí: http://stackoverflow.com/questions/1014666/force-ie8-into-ie7-compatiblity-mode – Gabriel

+38

En realidad estaba buscando exactamente lo contrario, que establece su estándar para el modo de compatibilidad, eso es una locura. –

+9

Mal javascript en una aplicación heredada que se bloquea en cualquier cosa que no sea IE7, es quien establece su estándar de compatibilidad. Un día, nos ocupamos de reemplazarlo ... –

Respuesta

458

There is the "edge" mode.

<html> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
     <title>My Web Page</title> 
    </head> 
    <body> 
     <p>Content goes here.</p> 
    </body> 
</html> 

Desde la página del enlace de MSDN:

modo Edge le dice a Windows Internet Explorer para mostrar contenido en el modo de alta disponible, que en realidad rompe el paradigma de “lock-in”. Con Internet Explorer 8, esto es equivalente al modo IE8. Si una versión (hipotética) futura de Internet Explorer admite un modo de compatibilidad más alto, las páginas configuradas en modo Edge aparecerán en el modo más alto admitido por esa versión; Sin embargo, esas mismas páginas todavía aparecerían en modo IE8 cuando se ve con Internet Explorer 8.

Sin embargo, el modo de "borde" no se recomienda su uso en la producción:

Se recomienda que los desarrolladores web restringen su uso del modo Borde para probar páginas y otros usos que no sean de producción debido a los posibles resultados inesperados de la representación de contenido de la página en versiones futuras de Windows Internet Explorer.

Honestamente, no entiendo del todo por qué. Pero de acuerdo con esto, la mejor manera de ir en este momento es usando IE=8.

+0

Esto es realmente bueno para usar con el complemento Chrome Frame. Elimina el botón de "compatibilidad" de IE. Tuve problemas con el uso del marco de Chrome con IE8 y versiones anteriores, pero alguien que usa IE9 tiene el botón de compatibilidad configurado como predeterminado y terminan siendo forzados a instalar Google Chrome Frame cuando no lo necesitan. –

+7

A partir del 8/6/2012, Microsoft parece estar usando 'IE = 10' en sus propios sitios. Si ha probado su sitio en IE10 (versión de vista previa), es seguro usar esto; de lo contrario, es posible que prefiera a 'IE = 9' por ahora. – calvinf

+70

He descubierto que esto NO funciona si el usuario (o el administrador del sistema) ha activado el modo de compatibilidad como predeterminado yendo a 'Herramientas-> Configuración de vista de compatibilidad', y marcando Mostrar todos los sitios web en la Vista de compatibilidad. Para solucionar el problema, tengo que devolver el encabezado en la respuesta HTTP: 'Compatible con X-UA: IE = edge' – speedplane

26

creo que esto va a hacer el truco:

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

Después de muchas horas de solución de problemas estas cosas ... Éstos son algunos aspectos destacados rápidos que nos ayudaron a partir de los documentos X-UA-Compatible: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

Uso <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • Los Estándar de usuario Agente modos (la no -emular unos) ignorar las directivas <!DOCTYPE> en su página y renderizar en base a los estándares admitidos por esa versión de IE (por ej., IE=8 obedecerá mejor el espacio entre los bordes de la tabla y algunos pseudo selectores que IE=7).

  • Mientras, los Emular modos dicen IE seguir cualquier <!DOCTYPE> directivas en su página, lo que hace el modo de estándares basados ​​en la versión que elija y peculiaridades modo basado en IE=5

  • Los valores posibles para el atributo content son:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

7

IE8 está predeterminado en modo estándar para el modo intERnet y peculiaridades para intRAnet. La metaetiqueta HTML se ignora si tiene el doctype configurado en xhtml transitional. La solución es agregar un encabezado HTTP en el código. Esto funcionó para nosotros. Ahora nuestro sitio de intranet está forzando a IE8 a renderizar la aplicación en modo estándar.

Agregado a la páginaIntervalo de la clase de la página base (ASP.net C#): Response.AddHeader ("Compatible con X-UA", "IE = EmulateIE8");

referencia: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

56

Si está trabajando con una página en la zona de intranet, es posible que IE9 no importa lo que haces, es entrar en el modo IE7 comp.

Esto se debe a la configuración en la configuración de compatibilidad de IE que dice que todos los sitios de Intranet deben ejecutarse en modo de compatibilidad. Puede desmarcar esto a través de una directiva de grupo (o simplemente deshabilitando en IE), o puede establecer lo siguiente:

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

Esto funciona (como se detalla en otras respuestas), pero no pueden aparecer inicialmente de modo: debe venir antes de que las hojas de estilo sean declaradas. Si no lo hace, se ignorará.

+1

gracias, esto me ayuda a –

+3

gracias por la advertencia sobre la hoja de estilo, esto estaba causando problemas y sé la razón ahora! – emre

+0

Sí, inicialmente asaltado por ubicación. Gracias por agregar esto. –

15

La solución etiqueta meta no funcionaba para nosotros, pero de colocarlo en la cabecera de la respuesta hizo:

header('X-UA-Compatible: IE=edge,chrome=1'); 
+2

+1 para 'cromo = 1'; Nunca supe de eso. Por lo que vale la pena, cambiarlo a IE = 10 solucionó una serie de problemas de representación en mi sitio que IE = edge no tuvo ningún efecto. –

+0

Explicación de la propiedad 'chrome = 1', http://stackoverflow.com/a/22059516/368691. Ten en cuenta que Chrome Frame ha sido retirado. http://blog.chromium.org/2013/06/retiring-chrome-frame.html – Gajus

+1

véanse los comentarios sobre otras respuestas ... He descubierto que este no funciona si el usuario (o el administrador del sistema) se ha convertido en la compatibilidad modo predeterminado yendo a Herramientas-> Configuración de vista de compatibilidad, y marcando Mostrar todos los sitios web en la Vista de compatibilidad. speedplane 19 de abril de 13 a 11:29 La metaetiqueta de compatibilidad DEBE ser la primera metaetiqueta, y no puede haber declaraciones condicionales IE antes de la etiqueta. Más: tesmond.blogspot.com/2011/10/... - Chris Sobolewski Ago 19 de '13 a las 20:23 – felickz

9

Sólo unas pocas notas más sobre este tema en base a mis experiencias recientes. La universidad en la que trabajo expide laptops con IE 8 configurado en modo compatibilidad para todos los sitios de Intranet. Traté de agregar la metaetiqueta para deshabilitar este modo para las páginas que publica mi sitio, pero IE sistemáticamente ignoraba esta etiqueta. Como mencionó Lance en su publicación, agregar un encabezado de respuesta solucionó este problema.Así es como me puse la cabecera basado en el método repetitivo HTML5:

<IfModule mod_headers.c> 
    Header set X-UA-Compatible "IE=edge,chrome=1" 
    # mod_headers can't match by content-type, but we don't want to send this header on *everything*... 
    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$"> 
    Header unset X-UA-Compatible 
    </FilesMatch> 
</IfModule> 

Para que esta cabecera para realmente ser enviado, usted tiene que asegurarse de que tiene mod_headers encendidos en Apache. Si desea asegurarse de que tiene este mod activado, poner esto en una página que se puede ejecutar php:

<pre> 
<?php 
    print_r(apache_get_modules()); 
?> 
</pre> 
+0

El método .htaccess trabajó para mí, en IE8 + Se elimina el botón de compatibilidad (también conocido como el enemigo número 1) y las fuerzas de IE8 para evitar el uso del modo de compatibilidad. Relacionado: la alternativa de metaetiquetas solo parece funcionar bajo ciertas condiciones (IE Voodoo) en varias computadoras. –

3

Esto se debe al ajuste dentro de la configuración de IE Compatibility que dice que todos los sitios Intranet deben ejecutarse en la compatibilidad modo. Puede desmarcar esto a través de una directiva de grupo (o simplemente deshabilitando en IE), o puede establecer lo siguiente:

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

Aparentemente no es posible cambiar los ajustes de la vista de compatibilidad como una política de grupo, pero es algo que quizás pueda cambiarse en el registro, esta metaetiqueta funciona bien para mí, tuve que hacer que el atributo requerido funcionara como parte de un formulario html, funcionó en Chrome y Firefox pero no en IE.

Aquí hay una buena muestra de qué navegadores son compatibles con cada elemento html 5 individual.

http://html5readiness.com/

Aviso el denominador común de Google Chrome, soporta todo. Espero que esto sea de ayuda

+0

Parece que Firefox e IE 10 ahora son compatibles con todo. El gráfico no lo hace tan claro como lo hace para Chrome. –

19

Como se sugiere en este answer a una pregunta relacionada, el modo "borde" se puede establecer en el archivo Web.Config. Esto hará que se aplica a todo el HTML de regresar de la aplicación sin la necesidad de insertar en las páginas individuales:

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

Este mismo paso también se puede lograr mediante modifying the "HTTP Response Headers" using IIS Manager para el servidor IIS, todo el sitio web o aplicaciones específicas.

0

Inserte como el primer elemento debajo de la etiqueta.

Esto obliga a IE a representar la página en la versión física de IE e ignora la "configuración de modo" del navegador. Esto se puede configurar en las herramientas de desarrollador, intente cambiarlo a una versión anterior de IE para probar, esto se debe ignorar y la página debe verse exactamente igual.

0

Si tiene acceso al servidor, la forma más confiable de hacerlo es hacerlo en el servidor, en IIS. Vaya a Encabezados de respuesta HTTP de IIS. Agregue Nombre: X-UA-Compatible
Valor: IE = borde Esto anulará su navegador y su código.

Cuestiones relacionadas