internet-explorer - predeterminado - modo de documento emulador internet explorer
Anular el modo de compatibilidad de intranet IE8 (19)
Por defecto, IE8 obliga a los sitios web de intranet a entrar en modo de compatibilidad Intenté cambiar el encabezado meta a IE8, pero no reconoce el encabezado meta y solo usa la configuración del navegador. ¿Alguien sabe como deshabilitar esto?
Agregue esto dentro de la etiqueta de encabezado de sus páginas (orientada a la versión de IE que desea):
<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 el modo de estándares IE8. Si TODAVÍA no muestra lo que deseas, probablemente se deba a que tienes un javascript que está verificando erróneamente la versión de IE. Consulte blogs.msdn.com/b/mikeormond/archive/2008/09/25/… para determinar de qué propiedad debe estar tecleando, porque incluso si establece la etiqueta compatible con meta X-UA, la cadena de agente de usuario seguirá diciendo MSIE 7.0 .
En mi caso, para la corrección tuve que agregar un cheque para el modo de compatibilidad de IE7. Lo hice usando un simple código javascript:
//IE8 and later will have the word ''trident'' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Cambia 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 administrador de nuestro sistema resolvió este problema al desmarcar la casilla global de nuestra organización. Los usuarios ni siquiera tenían que cerrar sesión.
El comentario de Stefan S sobre el modo documento frente al modo navegador fue muy pertinente para mi problema.
Tengo los metadatos de X-UA-Content en la página, pero estaba probando la versión del navegador en el lado del cliente a través de navigator.appVersion
. Esta prueba no refleja los metadatos porque proporciona el modo de navegador, no el modo de documento.
La respuesta para mí fue probar el 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 una cosa 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.
Encontré una respuesta de trabajo que permite anular la vista de compatibilidad de Intranet verificada. 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");
Es posible anular el modo de compatibilidad en intranet.
Para IIS, simplemente agregue el siguiente código a web.config. Me funcionó 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'')
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://.com/a/4130343/24267 . Ese parece ser el caso, ya que ninguna de las sugerencias que he intentado ha funcionado. En IE8, el "Modo de navegador" se configura en la vista de compatibilidad de Internet Explorer 8, independientemente del tipo de encabezado compatible con X-UA que envíe.
Tuve que hacer un manejo especial para IE7 y el modo de compatibilidad, lo que provocó que el navegador se renderizara utilizando IE8, pero al informar que era IE7, rompí mi código. Así es como arreglé mi código (soy consciente de que este es un hack horrible y debería estar probando características que no sean versiones de 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) { // Liar, this is IE8 in compatibility mode. isIE8 = true; }
Esto no es exactamente una solución, pero creo que es la mejor. En nuestros sitios de intranet, les decimos a las personas que solo se puede acceder a ellos a través de Firefox, no atendemos a los usuarios de IE que se encuentran aquí. Verifique el agente de usuario en el servidor o en el lado del cliente y niegue el acceso desde IE. Y yo soy un programador .NET.
Había luchado con este problema y quería ayudar a proporcionar una solución y conocimiento únicos.
Ciertos marcos basados en AJAX inyectarán javascripts y hojas de estilo al comienzo de <head>
y, al hacerlo, parece impedir que la solución de metaetiquetas bien establecida funcione correctamente. En este caso, encontré que la inyección directa en el encabezado de respuesta HTTP, al igual que la respuesta de Andras Csehi, resolverá el problema.
Para aquellos de nosotros que usamos Java Servlets, sin embargo, 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 {
}
}
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 una marca en el encabezado http y algunos comentarios indican que una solución que utiliza una etiqueta meta no funciona.
Creo que esta entrada de blog proporciona 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-to-create-durable-enterprise-web-applications.aspx
Los puntos principales:
- configurando la información usando una metaetiqueta y en el encabezado ambos trabajos
- La etiqueta meta tiene prioridad sobre el encabezado
- La etiqueta meta tiene que ser la primera etiqueta, para asegurarse de que el navegador no determine el motor de renderizado antes basado en heurísticas
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
- El modo navegador
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) IE envía a los servidores, qué IE de Document Mode está predeterminado y cómo IE evalúa los comentarios condicionales.
Puede encontrar más información sobre el modo documento frente al 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 solo influirán en el modo de documento . Así que si confías en la detección del navegador, esto no te ayudará. Pero si está utilizando la detección de características, este debería ser el camino a seguir.
Así que recomendaría usar la etiqueta meta (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 advierte contra el uso de EmulateIEX. Aquí una cita:
Dicho esto, una cosa que me parece extraña es cuando una aplicación solicita EmulateIE7 o EmulateIE8. Estos modos emulados son en sí mismos decisiones. Entonces, en lugar de ser específico acerca de lo que quiere, está pidiendo una de dos cosas y luego determina cuál de esas dos cosas busca un DOCTYPE en otra parte (y luego intenta entender si ese DOCTYPE le dará los 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 de IE7, use IE = 7, en lugar de IE = EmulateIE7. (Tenga en cuenta que esto no significa que no deba usar un DOCTYPE, debe hacerlo).
Intenta poner lo siguiente en el encabezado:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Cortesía de HTML5 de Paul Irish (pero también funciona en XHTML Transitional).
Michael Irigoyen tiene razón PERO es un poco más complicado ...
Si está utilizando el maravilloso texto 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 al modo de compatibilidad en un entorno de Intranet si tiene activada 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.
Así funcionará el siguiente código:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Básicamente, si activa los comentarios condicionales de IE antes de la <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
, será forzado a entrar en modo de compatibilidad en un entorno de Intranet si es ejecutando IE9 con la configuración por defecto.
ACTUALIZACIÓN - INFORMACIÓN ADICIONAL: Pero tenga en cuenta que hay un truco que hará que el hervor de HTML5 funcione:
Agregue un comentario condicional, antes del DOCTYPE. Y tenga en cuenta también que cuando hace eso , también puede agregar comentarios condicionales en torno a la directiva X-UA-Compatible
, 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 mencionó en esa publicación del blog, también se puede reemplazar el comentario condicional antes del DOCTYPE con un comentario semi condicional sin condición : <!--[]-->
. Así, como tal:
<!--[]-->
<!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, mediante esta respuesta a otra pregunta , activará el problema bien conocido que lo tiene - para versiones heredadas de IE sin soporte para la X-UA-Compatioble
(leer: para IE7 e IE6) - X-UA-Compatioble
el navegador en modo peculiaridades.
Para cualquier persona que lea esto y desactive 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í.
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).
Prueba este metatag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Debería obligar a IE8 a mostrarse como Modo estándar de IE8, incluso si la opción "Mostrar sitios de intranet en vista de compatibilidad" está marcada [en Intranet o en todos los sitios web], lo intenté por mi cuenta en IE 8.0.6
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 también como la MISMA ETIQUETA .
Gracias a @ stefan.s por incluirme en tu excelente respuesta. Antes de leer que tenía:
Esto no funcionó
<head>
<link rel="stylesheet" type="text/css" href="/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 conjunto de clientes de IE8 para usar la compatibilidad representa la página como modo estándar de IE8: el contenido = ''IE = 9'' significa usar el estándar más alto disponible hasta e incluyendo IE9.
Si abre el menú "Herramientas" y selecciona "Configuración de la vista de compatibilidad", en el cuadro de diálogo que se encuentra en la parte inferior aparece la opción "Mostrar sitios de intranet en modo de compatibilidad". Si desactiva esta opción, debería resolver el problema e IE utilizará el modo basado en el DOCTYPE.
Si desea que su sitio web fuerce el modo de estándares de IE 8, use este 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".
Según los desarrolladores de IE, esto debería "Mostrar los DOCTYPE de estándares en el modo de Estándares de IE8; Mostrar los DOCTYPE de Quirks en el modo de quirófanos. Use esta etiqueta para anular la vista de compatibilidad en las máquinas cliente y obligar a los Estándares a los estándares de IE8".
más información en esta publicación del blog de IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Tenía el mismo problema. Funcionó utilizando
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />