Anular el modo de compatibilidad de intranet IE8
De forma predeterminada, IE8 obliga a los sitios web de la intranet a entrar en modo de compatibilidad. Intenté cambiar el meta encabezado a IE8, pero no reconoce el meta encabezado y solo usa la configuración del navegador. ¿Alguien sabe cómo desactivar esto?
Es posible anular el modo de compatibilidad en la intranet.
Para IIS, simplemente agregue el siguiente código a web.config. Funcionó para mí con IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Equivalente a Apache:
Header set X-UA-Compatible: IE=Edge
Y para nginx:
add_header "X-UA-Compatible" "IE=Edge";
Y para express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen tiene razón PERO es un poco más complicado...
Si está utilizando el maravilloso texto estándar de Paul Irish, tendrá algo como lo siguiente:
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Esto NO funcionará como se esperaba y obligará a IE a entrar en modo de compatibilidad en un entorno de intranet si tiene marcada la opción "Mostrar sitios de intranet en vista de compatibilidad". Debe eliminar los comentarios condicionales de IE para evitar el modo de compatibilidad de Intranet.
Entonces el siguiente código funcionará:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Básicamente, si activa comentarios condicionales de IE antes de la <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
declaración, se le forzará a entrar en modo de compatibilidad en un entorno de Intranet si está ejecutando IE9 con la configuración predeterminada.
ACTUALIZACIÓN - INFORMACIÓN ADICIONAL: Pero tenga en cuenta que hay un truco que hará que el HTML5 Boilplate funcione:
Agregue un comentario vacío y condicional antes de DOCTYPE. Y tenga en cuenta también que cuando haga eso , también podrá agregar comentarios condicionales alrededor de la X-UA-Compatible
directiva, haciendo que la página también sea válida para HTML5. Así, por ejemplo:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Una publicación de blog que se inspiró en la primera parte de esta respuesta tiene más detalles. Y por cierto: como se menciona en esa publicación de blog, también se puede reemplazar el comentario condicional antes del DOCTYPE con un comentario semi condicional sin condición :. <!--[]-->
Así, así:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Pero tenga en cuenta que la última variante ( <--[]--><!DOCTYPE html>
), como se explica, por ejemplo, en esta respuesta a otra pregunta , activará el conocido problema de que, para versiones heredadas de IE sin soporte para X-UA-Compatioble
(léase: para IE7 e IE6), pondrá el navegador en en modo capricho.
Si despliega el menú "Herramientas" y elige "Configuración de vista de compatibilidad", en ese cuadro de diálogo en la parte inferior hay una configuración "Mostrar sitios de intranet en modo de compatibilidad". Si desmarca esto, debería resolver el problema e IE usará el modo basado en DOCTYPE.
Existe cierta confusión en las respuestas a esta pregunta.
La respuesta principal es actualmente una solución del lado del servidor que establece una marca en el encabezado http y algunos comentarios indican que una solución que utiliza una metaetiqueta simplemente no funciona.
Creo que esta entrada de blog ofrece una buena descripción general de cómo utilizar la metainformación de compatibilidad y, en mi experiencia, funciona como se describe: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-compatible-para-crear-aplicaciones-web-empresariales-duraderas.aspx
Los puntos principales:
- configurar la información usando una metaetiqueta y en el encabezado ambos funcionan
- La metaetiqueta tiene prioridad sobre el encabezado.
- La metaetiqueta tiene que ser la primera etiqueta, para garantizar que el navegador no determine el motor de renderizado antes en función de la heurística.
Un punto importante (y creo que a partir de este punto surge mucha confusión) es que IE tiene dos "clases" de modos:
- El modo documento
- El modo navegador
El modo de documento determina el motor de renderizado (cómo se representa la página web).
El modo de navegador determina qué cadena de agente de usuario (UA) envía IE a los servidores, cuál es el modo de documento predeterminado de IE y cómo evalúa IE los comentarios condicionales.
Puede encontrar más información sobre el modo documento versus el modo navegador en este artículo: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx?Redirected=true
En mi experiencia, los metadatos de compatibilidad sólo influirán en el modo del documento . Entonces, si confías en la detección del navegador, esto no te ayudará. Pero si utiliza la detección de funciones, este debería ser el camino a seguir.
Entonces recomendaría usar la metaetiqueta (en la página html) usando esta sintaxis:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Aviso: proporcione una lista de los modos de navegador que ha probado.
La publicación del blog también desaconseja el uso de EmulateIEX. Aquí una cita:
Dicho esto, una cosa que encuentro extraña es cuando una aplicación solicita EmulateIE7 o EmulateIE8. Estos modos de emulación son en sí mismos decisiones. Entonces, en lugar de ser específico sobre lo que desea, está solicitando una de dos cosas y luego determinando cuál de esas dos cosas buscando en otra parte del código un DOCTYPE (y luego intentando comprender si ese DOCTYPE le brindará estándares). o peculiaridades dependiendo de su contenido (otra tarea a veces confusa). En lugar de hacer eso, creo que tiene mucho más sentido especificar directamente lo que se quiere, en lugar de dar una respuesta que sea en sí misma una pregunta. Si desea estándares IE7, utilice IE=7, en lugar de IE=EmulateIE7. (Tenga en cuenta que esto no significa que no deba utilizar un DOCTYPE; debería hacerlo).