Por defecto, IE8 fuerza a los sitios web de intranet a 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 deshabilitar esto?
Por defecto, IE8 fuerza a los sitios web de intranet a 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 deshabilitar esto?
Respuestas:
Es posible anular el modo de compatibilidad en la intranet.
Para IIS, simplemente agregue el siguiente código a web.config. Trabajó para mí con IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Equivalente para 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 repetitivo 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 forzará en 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 desencadena comentarios condicionales de IE antes de <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
declaración, se le obligará a pasar al 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 la plataforma HTML5 funcione:
Agregue un comentario condicional y vacío antes del DOCTYPE. Y tenga en cuenta también que cuando hace eso , también puede agregar comentarios condicionales alrededor delX-UA-Compatible
Directiva, por lo que la página HTML 5-válida también. Entonces, 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 inspirada en la primera parte de esta respuesta tiene más detalles. Y por cierto: Como se mencionó en esa entrada del blog, también se puede reemplazar el comentario condicional antes del DOCTYPE con un condicional semi comentario con ninguna 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 de IE heredadas sin soporte para X-UA-Compatioble
(lea: para IE7 e IE6), incorporará el navegador a en modo capricho.
Si despliega el menú "Herramientas" y selecciona "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, esto debería resolver el problema e IE usará el modo basado en el DOCTYPE.
Hay una cierta confusión en las respuestas a esta pregunta.
La respuesta principal es actualmente una solución del lado del servidor que establece un indicador en el encabezado http y algunos comentarios indican que una solución que usa una metaetiqueta simplemente no funciona.
Creo que esta entrada del blog ofrece una buena descripción de cómo usar 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:
Un punto importante (y creo que mucha confusión viene de este punto) es que IE tiene dos "clases" de modos:
El modo de documento determina el motor de representación (cómo se representa la página web).
El modo de navegador determina qué cadena de User-Agent (UA) envía IE a los servidores, qué valor predeterminado tiene el modo de documento y cómo evalúa los comentarios condicionales.
Puede encontrar más información sobre el modo de documento frente al modo de 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 solo influirán en el modo de documento . Entonces, si confía en la detección del navegador, esto no lo ayudará. Pero si está utilizando la detección de funciones, este debería ser el camino a seguir.
Por lo tanto, 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 ellos mismos decisiones. Entonces, en lugar de ser específico sobre lo que quiere, está pidiendo una de dos cosas y luego determina cuál de esas dos cosas al buscar un DOCTYPE en otro lugar (y luego intenta comprender si ese DOCTYPE le dará estándares o caprichos 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 desea, en lugar de dar una respuesta que en sí misma es una pregunta. Si desea los estándares IE7, utilice IE = 7, en lugar de IE = EmulateIE7. (Tenga en cuenta que esto no significa que no deba usar un DOCTYPE, debería hacerlo).
Prueba esta metaetiqueta:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Debería forzar a IE8 a renderizarse como modo estándar de IE8 incluso si se marca "Mostrar sitios de intranet en vista de compatibilidad" [ya sea para intranet o para todos los sitios web], lo probé yo mismo en IE 8.0.6
Nuestro administrador del sistema resolvió este problema desmarcando la casilla globalmente para nuestra organización. Los usuarios ni siquiera necesitaban cerrar sesión.
Encontré una respuesta que permite anular la Vista de compatibilidad de Intranet marcada. Solo agregue en el evento OnInit de su página esta línea (no necesita meta o web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Intenta poner lo siguiente en el encabezado:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Cortesía de HTML5 Boilerplate de Paul Irish (pero también funciona en XHTML Transitional).
Pude anular el modo de compatibilidad especificando la metaetiqueta como LA PRIMERA ETIQUETA en la sección de encabezado, no solo la primera metaetiqueta, sino como la PRIMERA ETIQUETA .
Gracias a @ stefan.s por ponerme en ello en su excelente respuesta. Antes de leer que tenía:
ESTO NO FUNCIONÓ
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
movió la etiqueta de enlace fuera del camino y funcionó
Esto funciona :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Por lo tanto, un cliente IE8 configurado para usar compatibilidad representa la página como modo estándar IE8: el contenido = 'IE = 9' significa usar el estándar más alto disponible hasta IE9 inclusive.
Esto no es exactamente una solución, pero creo que es la mejor. En nuestros sitios de intranet, le decimos a la gente que solo Firefox puede acceder a ella, no amamos a los usuarios de IE por aquí. Verifique el agente de usuario en el lado del servidor o del cliente y niegue el acceso desde IE. Y soy un programador .NET.
Había luchado con este problema y quería ayudar a proporcionar una solución y una visión únicas.
Ciertos marcos basados en AJAX inyectarán javascripts y hojas de estilo al comienzo del <head>
y hacer esto parece evitar que la solución de metaetiquetas bien establecida funcione correctamente. En este caso, descubrí que inyectar directamente en el encabezado de respuesta HTTP, al igual que la respuesta de Andras Csehi, resolverá el problema.
Sin embargo, para aquellos de nosotros que usamos Java Servlets, una buena manera de resolver esto es usar un ServletFilter.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Podemos resolver este problema en el entorno Spring-Apache-tomcat agregando una sola línea en el método RequestInterceptor:
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
Referencia de - Cómo crear un filtro y modificar el encabezado de respuesta Cubre cómo podemos resolver este problema a través de un RequestInterceptor (Spring).
Si desea que su sitio web fuerce el modo estándar IE 8, use esta metaetiqueta junto con un DOCTYPE válido:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Tenga en cuenta el valor "EmulateIE8" en lugar del simple "IE8".
De acuerdo con los desarrolladores de IE, esto debería ser: "Mostrar los DOCTYPE de estándares en el modo de estándares IE8; Mostrar los DOCTYPE de Quirks en modo de Quirks. Use esta etiqueta para anular la vista de compatibilidad en las máquinas cliente y forzar los estándares a los estándares IE8".
Más información sobre esta publicación del blog de IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Esta pregunta es un duplicado del modo de navegador Force "Internet Explorer 8" en la intranet .
Las respuestas allí indican que no es posible deshabilitar la vista de compatibilidad (en el lado del servidor): https://stackoverflow.com/a/4130343/24267 . Ese ciertamente parece ser el caso, ya que ninguna de las sugerencias que he probado ha funcionado. En IE8, el "Modo de navegador" se configura en la vista de compatibilidad de Internet Explorer 8 sin importar qué tipo de encabezado compatible con X-UA envíe.
Tuve que hacer un manejo especial para IE7 y el modo de compatibilidad, lo que provocó que el navegador se procesara con IE8 pero informara que era IE7, rompió mi código. Así es como arreglé mi código (soy consciente de que este es un truco horrible y debería probar las características, no las versiones del navegador):
isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Trident") ! = -1) { // Mentiroso, esto es IE8 en modo de compatibilidad. isIE8 = verdadero; }
Agregue esto dentro de la etiqueta principal de sus páginas (orientada a la versión de IE que desee):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Tenga en cuenta que esto NO cambiará el hecho de que el navegador dice que está en modo de compatibilidad (llamado modo de navegador), pero la página se mostrará en modo estándar IE8. Si TODAVÍA no se muestra como lo desea, probablemente sea porque tiene JavaScript que está verificando erróneamente la versión de IE. Consulte la siguiente publicación de blog para determinar de qué propiedad debería estar quitando porque incluso si configura la etiqueta compatible con meta X-UA, la cadena del agente de usuario seguirá diciendo MSIE 7.0 .
En mi caso, para la solución tuve que agregar una verificación para el modo de compatibilidad de IE7. Lo hice usando un código javascript simple:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Para cualquier otra persona que lea esto y busque deshabilitar esto a través de GPO para todos los usuarios, esta es la configuración:
Configuración del equipo / Plantillas administrativas / Componentes de Windows / Internet Explorer / Vista de compatibilidad / Activar el modo de estándares de Internet Explorer para Intranet local
aunque la edición web.config lo arregló para mí.
Cambiar los encabezados en .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Encontré la solución a este problema aquí: https://github.com/h5bp/html5-boilerplate/issues/378
El comentario de Stefan S sobre el modo de documento versus el modo de navegador fue muy pertinente para mi problema.
Tengo los metadatos X-UA-Content en la página, pero estaba probando la versión del navegador del lado del cliente navigator.appVersion
. Esta prueba no refleja los metadatos porque le da al modo de navegador no al modo de documento.
La respuesta para mí fue probar document.documentMode
algo como:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Ahora, mi etiqueta meta X-UA-Content se refleja en la prueba de mi navegador.
¿Por qué hago algo tan mal visto como probar el navegador? Velocidad. Varios de mis complementos de jQuery, como tablesorter, son demasiado lentos en IE6 / 7, y quiero desactivarlos. No estoy seguro de que probar las características del navegador pueda ayudarme a resolver esto de otra manera.