2009-08-03 8 views
6

Tengo dos sitios web muy diferentes. ¡Ambos tienen diferentes errores cuando se muestran en el modo de navegador "Internet Explorer 8"!Frustrante: ¡No se puede forzar IE 8 a la "Vista de compatibilidad"!

Al hacer clic en el botón "Vista de compatibilidad" junto a la barra de direcciones, ambos sitios se ven geniales. Cuando después miro el "Modo de navegador" y "Nodo de documento" utilizando las "Herramientas de desarrollador" incorporadas, también noto que el "Modo de navegador" es "Vista de compatibilidad de IE8" y el "Modo de documento" es "Estándares de IE7 ". Justo como espero que sean.

Luego quiero forzar "Internet Explore 8" en el "Modo de navegador": "Vista de compatibilidad IE8", para que mis usuarios no tengan que hacer clic en el botón "Vista de compatibilidad" junto a la barra de direcciones para obtener lo que realmente necesitan ver.

La única manera que puedo pensar de hacer esto es mediante la inserción de una metaetiqueta debajo del título dentro de la cabecera de la siguiente manera:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <title>Test</title> 
     <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 
     <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
     <link ... /> 
     <script ...></script> 
    </head> 
    <body> 
     ... 
    </body> 
</html> 

Entonces vuelvo a cargar el botón "Vista de compatibilidad" sitio web y junto a la dirección la barra desaparece Tal como se esperaba Cuando después miro el "Modo de navegador" y el "Nodo de documento" utilizando las "Herramientas de desarrollador" incorporadas, de repente veo algo que realmente NO esperaba. Esperaba que el "Modo navegador" sea "Vista de compatibilidad IE8" y el "Nodo de documento" sean "Estándares IE7", pero el "Modo navegador" es "IE8" y el "Modo documento" es "Estándares IE7" y el los sitios web de repente tienen un nuevo conjunto de errores en comparación con cuando se ven en el modo de navegador "Internet Explorer 8".

Es muy frustrante por qué no puedo forzar el modo de navegador "IE8 Compat view" en lugar de los modos de navegador "Internet explore 7" o "Internet explore 8"?

+0

Tengo el mismo problema exacto, me alegro de haber encontrado su publicación. Si bien hay algunas buenas respuestas a continuación, ¿qué hiciste finalmente para solucionar esto? Mi única diferencia es que configuro "X-UA-Compatible: IE = EmulateIE7" a través de un encabezado en lugar de una metaetiqueta, pero existe el mismo problema. Estoy usando algunos controles de terceros y solo actúan correctamente en IE8 cuando el usuario hace clic en el botón compat del navegador o selecciona "Mostrar todos los sitios web en la vista de compatibilidad". El encabezado o el meta hace exactamente lo que usted describe :( – felickz

Respuesta

0

¿No es el problema que está utilizando el tipo de documento incorrecto?

Tal vez:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

Para obtener más información, consulte http://htmlhelp.com/tools/validator/doctype.html.

+0

Hay no hay nada realmente malo con el doctype. Hay muchas razones para no usar XHTML, pero eso es un asunto completamente diferente. –

+0

E incluso si hubiera algo mal. Presionando el botón "Vista de compatibilidad" en mi caso ignora esto y muestra el sitio perfectamente EmulateIE7 realmente debería ser igual. Eso sería obvio. –

5

Para quote the IEBlog:

“el modo de navegación” afecta el agente cadena del usuario, la versión del vector utilizado cuando evaluación de los comentarios condicionales, y el modo de representación.

Detallada un poco más en http://msdn.microsoft.com/en-us/library/dd565624(VS.85).aspx.

Como puede ver claramente, no podría afectar todas estas cosas de todas formas: cuando le dice al navegador que actúe como IE7, ya está actuando como IE8.

Quizás la verdadera pregunta es: ¿Por qué le importa tanto cuál es el modo de navegador? El modo documento es lo que más le preocupa: todo lo que cambia el modo del navegador en lo que se refiere a la representación se refiere a cosas que están excluidas/incluidas pero verificaciones de versiones, y los usuarios de no van a buscar en las herramientas del desarrollador de todos modos, por lo que no les importará.

En lugar de perder mucho tiempo haciéndolo parecer puro modo de compatibilidad en las herramientas de desarrollador, debería asegurarse de que la comprobación de cadenas de agente de usuario y los comentarios condicionales lo hagan para que IE7 e IE8 obtengan el mismo material para trabajar, y luego dejar el EmulateIE7 en

EDIT:.

el problema es sus comprobaciones de versión, y como prometí a continuación, voy a decirle dónde está el problema.

Si utiliza las herramientas de desarrollador para depurar el script de ubicación del menú, puede buscar y ver que la ruta de ejecución para get_x_position difiere cuando el navegador se informa como IE7 o IE8: is_ie5up se establece en verdadero para el modo IE7 y falso para el modo IE8. Esto da como resultado la devolución de valores muy diferentes.

En este punto, hay que volver a donde se establece esta variable:

var is_ie5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4)); 

Como se puede ver, esto depende del valor de is_ie6up, así que vamos a echar un vistazo al código que rodea ..

var is_ie8up = (is_ie8 || is_ie9up); 
var is_ie7up = (is_ie7 || is_ie8up); 
var is_ie7up = (is_ie7); 
var is_ie6up = (is_ie6 || is_ie7); 
var is_ie5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4)); 
var is_ie5_5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4 && !is_ie5)); 

... detecta la falla (Sugerencia: compare las líneas 2 y 4 de ese fragmento)?

Correcto: is_ie6up no está configurado como verdadero a menos que el navegador sea exactamente IE6 o IE7. La línea correcta debería leer, por supuesto,

var is_ie6up = (is_ie6 || is_ie7up); 

... pero espera. Tampoco es bueno, porque la línea 3 del fragmento cambia is_ie7up para que solo sea verdadera si el navegador es exactamente IE7. Por lo tanto, debe eliminar la sobrescritura de is_ie7up y corregir la configuración de is_ie6up.

Supongo que tiene el mismo problema EXACTO en el otro sitio: ha estropeado los controles del navegador de la misma manera.

+0

"¿Por qué le importa tanto cuál es el modo de navegador?" Importa porque tengo que forzar/activar el tercer modo de navegador "Compatibilidad con Internet Explorer 8 Ver "porque SOLO en este modo mi sitio se ve bien. EmulateIE7 activa el modo de navegador" Internet explore 8 "y el documento" Estándares IE7 " modo de pago, pero en mi caso esto visualmente no es lo mismo que "Vista de compatibilidad de Internet Explorer 8" y se ve mal. –

+0

La URL de uno de los sitios es: http://www.topotarget.com y en http://www.topotarget.com/index_test.dsp puede ver la página principal del sitio con EmulateIE7 encendido . Espero que esto te ayude a entender mi problema. –

+0

Acerca de las herramientas de desarrollador: solo lo uso para la depuración para probar mi punto en esta pregunta. Entonces entiendo lo que dices sobre eso. –

2

Ha establecido la metaetiqueta correctamente, pero parece que IE8 usa el modo de representación anterior hasta que reinicia el navegador.

para decir lo que los usuarios van a ver:

  1. Haga clic en la barra de herramientas de Document Mode en el desarrollador y ver qué valor se marcó (Page Default).
  2. Reinicie IE8 y vea su documento - IE ahora debería usar la página predeterminada.
1

El atributo xmlns = "http://www.w3.org/1999/xhtml" está cancelando la metaetiqueta. Mueva la metaetiqueta sobre la etiqueta html. Sí, eso es correcto, arriba de la etiqueta html. Luego ejecutará emulateIE7 antes de que se ejecute javascript. Probé esto en IE7, IE8 y Firefox.

+0

¡Sí! Tenía el "emulateIE7" dentro de una declaración "If IE" que una vez eliminada y sobre el HTML funcionó.Este consejo finalmente funcionó para mí, gracias. – rtfminc

0

Estaba transformando un documento XML, por lo que no pude establecer el DOCTYPE correctamente. En lugar de moverme por encima de <html>, que no es XML, simplemente lo puse en un encabezado.

En PHP:

header("X-UA-Compatible: IE=7"); 
0

tenido un problema obligando a IE8 IE8 en las normas del modo de documentos utilizando la plancha de caldera de HML5 para un sitio ASP clásico. Recopilando respuestas de esta y otras preguntas, agregando este código ARRIBA la declaración <doctype> parece haber resuelto el problema y forzó el Modo Documento de IE7 a IE8. <%= response.AddHeader("X-UA-Compatible", "IE=edge") %>

1

En mi caso particular, mi sitio no se muestren correctamente en los Compat Vista. Finalmente aprendí que el modo de navegador afecta la cadena del agente de usuario. Las reglas de estilo de mi sitio se basaban en User Agent, por lo que algunos estilos simplemente no se aplicaban en la vista de compatibilidad.

que estaba usando

document.documentElement.setAttribute('data-useragent', navigator.userAgent);

para que más tarde podría utilizar css selectores de atributos como

html[data-useragent*='MSIE 8.0'] p {}

Solucioné mediante la adición de:

html[data-useragent*='MSIE 7.0'] p {}

(no preocuparse por cierto IE7 como verdadero IE7 no fue compatible de todos modos)

En mi experiencia, no hay nada que un desarrollador pueda hacer para forzar IE8 desde "Modo navegador: Vista de compatibilidad IE8" en "Modo navegador: IE8". Una vez más, estoy hablando de BrowserModes NOT DocumentModes (que puede controlarse mediante metaetiquetas, encabezados de respuesta, etc.).

Cuestiones relacionadas