Desactiva el modo de compatibilidad de IE con etiquetas

375

Estoy trabajando para un cliente que fuerza el modo de compatibilidad en todos los sitios de intranet. Me preguntaba si hay una etiqueta que pueda poner en mi HTML que desactive el modo de compatibilidad.

Al Katawazi
fuente
Creo que la respuesta que está buscando está aquí: stackoverflow.com/questions/1014666/…
Gabriel
45
En realidad, estaba buscando exactamente lo contrario, que establece su estándar en el modo de compatibilidad, eso es una locura.
Al Katawazi
12
JavaScript incorrecto en una aplicación heredada que se bloquea en cualquier cosa que no sea IE7, que es quien establece su estándar de compatibilidad. Un día, lo reemplazaremos ...
pete the pagan-gerbil
1
@ petethepagan-gerbil ¿pudiste reemplazarlo? : P
agua helada
1
@icedwater Dejé la empresa hace más de 6 años :) Hicimos pequeñas mejoras para eliminar los problemas cada vez que tuvimos un cambio en la misma área, pero la deuda tecnológica nunca fue priorizada allí. No sé si alguna vez se solucionó al final.
pete the pagan-gerbil

Respuestas:

535

Existe el modo "borde" .

<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 de MSDN vinculada:

El modo Edge le dice a Windows Internet Explorer que muestre contenido en el modo más alto disponible, lo que en realidad rompe el paradigma de "bloqueo". Con Internet Explorer 8, esto es equivalente al modo IE8. Si una versión futura (hipotética) de Internet Explorer admitiera un modo de compatibilidad más alto, las páginas configuradas en modo Edge aparecerían en el modo más alto admitido por esa versión; sin embargo, esas mismas páginas seguirían apareciendo en modo IE8 cuando se visualicen con Internet Explorer 8.

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

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

Sinceramente, no entiendo completamente por qué. Pero de acuerdo con esto, la mejor manera de hacerlo en este momento es usar IE=8.

Pekka
fuente
77
A partir del 8/6/2012, Microsoft parece estar usando IE=10en sus propios sitios. Si ha probado su sitio en IE10 (versión de vista previa), es seguro usarlo; de lo contrario, es posible que desee seguir IE=9por ahora.
calvinf
75
Descubrí que esto NO funciona si el usuario (o el administrador del sistema) ha activado el modo de compatibilidad de forma predeterminada yendo a Tools->Compatibility View Settings, 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:X-UA-Compatible: IE=edge
speedplane
10
+1 a speedplane: el modo de compatibilidad de IE10 está activado de forma predeterminada para los sitios de intranet: UGH ... ¡gracias por el hallazgo!
viperguynaz
132
Un consejo para quienes encuentran esta respuesta, pero no pueden hacer que funcione para ellos. 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
2
Gracias Chris! Estuve luchando con esto durante 30 minutos cuando finalmente leí tu comentario. No lo tuve primero.
Hawkee
91

Después de muchas horas para solucionar este problema ... Aquí hay algunos aspectos destacados que nos ayudaron desde los X-UA-Compatibledocumentos: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

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

  • Los modos del Agente de usuario estándar (los no emulados) ignoran las <!DOCTYPE>directivas en su página y se procesan según los estándares admitidos por esa versión de IE (por ejemplo, IE=8obedecerán mejor el espaciado de borde de la tabla y algunos pseudo-selectores que IE=7).

  • Mientras que los modos de emulación le dicen a IE que siga las <!DOCTYPE>directivas en su página, representando el modo estándar basado en la versión que elija y el modo peculiar basado enIE=5

  • Los valores posibles para el contentatributo 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"

brandonjp
fuente
67

Si está trabajando con una página en la Zona de Intranet, es posible que IE9, sin importar lo que haga, vaya al modo Compat de IE7.

Esto se debe a la configuración dentro de la configuración de compatibilidad de IE que dice que todos los sitios de Intranet deben ejecutarse en modo de compatibilidad. Puede desmarcar esto mediante una política de grupo (o simplemente desmarcándolo en IE), o puede configurar lo siguiente:

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

Esto funciona (como se detalla en otras respuestas), pero puede que inicialmente no lo parezca: debe aparecer antes de que se declaren las hojas de estilo . Si no lo hace, se ignora.

Amadiere
fuente
3
gracias por la advertencia sobre la hoja de estilo, esto estaba causando problemas y ahora sé la razón.
eMRe
Sí, inicialmente asaltado por colocación. Gracias por agregar esto.
John Moylan
Gracias, esto fue de mucha ayuda. Tienen un GPO que establece el nivel efectivo de IE en 7 a pesar de que IE 11 está instalado. Esto me salvó de tener que poner algunas cuñas en el sitio para que el js funcione.
Charles Owen el
28

Creo que esto hará el truco:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Peter Ruderman
fuente
28

Como se sugiere en esta respuesta a una pregunta relacionada, el modo "borde" se puede configurar en el archivo Web.Config. Esto hará que se aplique a todo el HTML devuelto por la aplicación sin la necesidad de insertarlo en 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 modificando los "Encabezados de respuesta HTTP" utilizando el Administrador IIS para el servidor IIS, el sitio web completo o aplicaciones específicas.

Erik Anderson
fuente
19

La solución de metaetiquetas no funcionaba para nosotros, pero configurarla en el encabezado de respuesta sí:

header('X-UA-Compatible: IE=edge,chrome=1');
Lance Anderson
fuente
3
+1 para el 'cromo = 1'; Nunca supe de eso. Por lo que vale, cambiarlo a IE = 10 solucionó una serie de problemas de representación en mi sitio en los que IE = edge no tuvo ningún efecto.
Explicación de la chrome=1propiedad, stackoverflow.com/a/22059516/368691 . Tenga en cuenta que Chrome Frame ha sido retirado. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
1
ver comentarios sobre otras respuestas ... He descubierto que esto NO funciona si el usuario (o el administrador del sistema) ha activado el modo de compatibilidad de forma predeterminada yendo a Herramientas-> Configuración de Vista de compatibilidad y marcando Mostrar todos los sitios web en Vista de compatibilidad . speedplane 19 de abril de 2013 a las 11:29 7 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 19 de agosto de 13 a las 20:23
felickz
Traté de ponerlo en la primera línea en la página de diseño. No funciona, Stu mencionó cambiar los encabezados de respuesta HTTP de IIS. Lo intenté. Reinicié el grupo de aplicaciones. Inspecciono más. Esta página está anidando en otra página. La otra página tiene otro meta. Este es el sitio web de producción. Mucha gente está accediendo a esta página. poner esta etiqueta encima es una misión imposible. Cualquier otra solución o estoy atornillado
user12345
10

Solo unas pocas notas más sobre este tema basadas en mis experiencias recientes. La universidad en la que trabajo tiene problemas con las computadoras portátiles con IE 8 en modo de compatibilidad para todos los sitios de intranet. Intenté agregar la metaetiqueta para deshabilitar este modo para las páginas que mi sitio ofrece, pero IE siempre ignoró esta etiqueta. Como Lance mencionó en su publicación, agregar un encabezado de respuesta solucionó este problema. Así es como configuro el encabezado 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 este encabezado se envíe realmente, debe asegurarse de tener mod_headers activados en Apache. Si quieres asegurarte de tener este mod activado, ponlo en una página que pueda ejecutar php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
fuente
El método .htaccess funcionó para mí, en IE8 +. Eliminó el botón de compatibilidad (también conocido como Enemigo No. 1) y obliga a IE8 a evitar el uso del modo de compatibilidad. Relacionado: La alternativa de metaetiqueta solo parece funcionar bajo ciertas condiciones (IE Voodoo) en varias computadoras.
William Isted
10

IE8 adopta por defecto el modo estándar para IntERnet y el modo peculiar para IntRAnet. La metaetiqueta HTML se ignora si tiene el doctype establecido en xhtml de transición. La solución es agregar un encabezado HTTP en el código. Esto funcionó para nosotros. Ahora nuestro sitio de intranet está obligando a IE8 a representar la aplicación en modo estándar.

Agregado a PageInit de la clase de página base (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

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

rswank
fuente
3

Esto se debe a la configuración dentro de la configuración de compatibilidad de IE que dice que todos los sitios de Intranet deben ejecutarse en modo de compatibilidad. Puede desmarcar esto mediante una política de grupo (o simplemente desmarcándolo en IE), o puede configurar lo siguiente:

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

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

Aquí hay una buena imagen de lo que los navegadores admiten cada elemento html 5 individual.

http://html5readiness.com/

Observe el denominador común Google Chrome, es compatible con todo. Espero que esto sea de ayuda

Agacharse
fuente
Parece que Firefox e IE 10 ahora también admiten todo. El gráfico no deja eso tan claro como lo hace para Chrome.
Tony L.
0

Insertar 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 debe ignorarse y la página debe verse exactamente igual.

technocrusaders.com
fuente
0

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

stu
fuente
Esto se restablece en la nueva implementación de IIS si se establece en el nivel del sitio web
Eman Pitts
0

Si desea que cada página web individual cargue el contenido elegido y está utilizando asp.net. Simplemente aplíquelo como la primera etiqueta debajo de la etiqueta de encabezado en Vistas> compartido> Layout.cshtml

solo un consejo

rubypeach888
fuente