2012-10-11 63 views
21

Esto me está volviendo loco.IE9 constantemente utilizando el modo de documento de estándares IE7 no importa lo que intento

No importa lo que intente, Internet Explorer está cambiando a IE7 Standards Document Mode. He intentado quitar mi código a nada para tratar de que se comporte, utilizando HTML5 boilet plate Y el restablecimiento de HTML5 (cuyo sitio pertenece al modo Quirks).

También he agregado la metaetiqueta que se supone obliga a IE a su última versión sin importar qué, pero todo lo que ha hecho es que mi marcado sea inválido de acuerdo con W3C.

Esto es lo que tengo; ¿Qué me estoy perdiendo?

<!doctype html> 

<!--[if IE 7 ]> <html class="ie7> <![endif]--> 
<!--[if IE 8 ]> <html class="ie8> <![endif]--> 
<!--[if gt IE 8]><!--><html><!--<![endif]--> 

<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <title></title> 
    <link rel="stylesheet" href="css/style.css"> 
</head> 
<body> 
    <p>Test text</p>   
</body> 
</html> 

EDITAR

tengo una solución que se encontró a través de una sugerencia a continuación. La sugerencia no funcionó, pero me llevó a una respuesta. Esto puede no ser 100% adecuado para todos, ya que impone una clase en la etiqueta body en lugar de html, pero funciona para mí y parece funcionar para IE.

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title></title> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <link rel="stylesheet" href="css/style.css"> 
</head> 
<!--[if IE 7 ]> <body class="ie7> <![endif]--> 
<!--[if IE 8 ]> <body class="ie8> <![endif]--> 
<!--[if gt IE 8]><!--><body><!--<![endif]--> 
<p>Test text</p>   
</body> 
</html> 
+0

Esto funciona muy bien en mi IE9 en Windows 7. Está mostrando que el modo de estándares IE9 es el predeterminado de la página y el modo que se está utilizando. ¿Su IE9 muestra el valor predeterminado de la página como IE7? – andyb

+0

¿Su sitio está en la "zona de intranet" en la configuración de IE? –

+0

solo por curiosidad, ¿las herramientas de desarrollo indicaban que el valor predeterminado de la página eran los estándares IE9 pero aún se usaba IE7? Esto es lo que está sucediendo para mí, estoy intentando tu solución pero el error no es constante, así que aún no estoy seguro si lo solucionó ... –

Respuesta

10

tengo una solución que se encontró a través de una sugerencia anterior. La sugerencia no funcionó, pero me llevó a una respuesta. Esto puede no ser 100% adecuado para todos, ya que impone una clase en la etiqueta body en lugar de html, pero funciona para mí y parece funcionar para IE.

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title></title> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <link rel="stylesheet" href="css/style.css"> 
</head> 
<!--[if IE 7 ]> <body class="ie7> <![endif]--> 
<!--[if IE 8 ]> <body class="ie8> <![endif]--> 
<!--[if gt IE 8]><!--><body><!--<![endif]--> 
<p>Test text</p>   
</body> 
</html> 

EDITAR

que han dejado de usar en realidad lo anterior y ahora añadir mis clases específicas de IE al elemento html, como se sugiere en HTML5BP.

También tenga en cuenta que es posible que desee eliminar chrome=1 de la metaetiqueta ya que Chrome Frame se eliminará pronto. Sin embargo, no hay problema en mantenerlo para esos raros casos en que alguien aún lo está usando.

Otra cosa para comprobar que no creo que se haya mencionado es el estado de lo que probablemente sea la configuración más irritante en IE - 'Mostrar sitios de intranet en la Vista de compatibilidad'. Si ejecuta un servidor de prueba con un nombre como http://mytestserver:8888 IE creerá que es un sitio de intranet y cambiará de modo independientemente de lo que haga en el encabezado del documento.

Esta configuración está habilitada en la política de grupo de mi empresa, ya que nuestra antigua intranet compartida realmente se basa en ella. Genial para la vieja basura, pero terrible para las cosas nuevas que en realidad se van a adherir a los estándares.

Apague ese dispositivo en Tools > Compatibility View Settings y prepárese para cambiarlo manualmente si tiene algún sitio heredado.

10

de this thread

La etiqueta meta X-UA-Compatible debe aparecer inmediatamente después del título en el elemento. No se pueden colocar otras metaetiquetas, enlaces css y guiones js antes.

+2

Intenté con lo que sugeriste y, por desgracia, no hizo ninguna diferencia. SIN EMBARGO, me llevó a la respuesta. Estoy usando comentarios condicionales para imponer una clase en mi etiqueta 'html' para que pueda adaptar mi CSS a las versiones anteriores de IE. Resulta que los comentarios condicionales no se pueden usar antes de 'head', así que simplemente moví mi comentario condicional a la etiqueta del cuerpo. Funciona bien y todavía puedo personalizar mi CSS. GRACIAS. –

+0

@AlanShortis Por favor, publique esto como respuesta a su propia pregunta. Es la forma formal correcta. –

+0

@Markus Hecho. Gracias de nuevo por señalarme en la dirección correcta. –

8

En ocasiones, IE se comporta de forma muy negativa en los sitios de intranet, forzándolos a entrar en el modo de compatibilidad independientemente de la línea <meta> en la cabeza. Sin embargo, puede hacer que el servidor envía una cabecera a la fuerza bruta IE comportarse añadiendo lo siguiente a la configuración web:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="X-UA-Compatible" value="IE=Edge" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 
+0

Gracias por esto, no es la solución a este problema específico, pero tengo algún trabajo de intranet en el horizonte y me aseguraré de usarlo. –

2

También estaba teniendo este problema con ie10 forzando el modo de estándares IE7 para sitios en localhost. Agregar/usar un host virtual que incluye un punto en su nombre (local.x) resolvió el problema.

+0

Esto funcionó como un encanto. –

+0

Información sobre la zona de intranet que afecta a la representación: http://msdn.microsoft.com/en-ca/library/jj676914(v=vs.85).aspx –

0

El vínculo que Stuart publicado trabajó para mí como lo relacionado con la página web local está configurado para el modo de compatibilidad. Una vez que eliminé el sitio web de la intranet de la lista del modo de compatibilidad, la página pasó al modo IE = 9 correcto de acuerdo con la metaetiqueta.

3

Mantenga el

<!doctype html> 

a ser la primera línea de la fuente de la página, y la etiqueta meta X-UA-Compatible debe estar adyacente siguiente hermano de la etiqueta Tilte.

<meta charset="utf-8"> 
<title></title> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
0

He utilizado lo siguiente para solucionar este problema cuando IE8 se estaba procesando en el modo documento de estándares IE7 a pesar de todo lo demás que probé. Añadir esto justo antes de la declaración de tipo de documento:

<!--[if IE ]><![endif]--> 

Así que el HTML resultante sería algo como esto:

<!--[if IE ]><![endif]--> 
<!doctype html> 
<!--[if IE 7]><html class="lt-ie8"><![endif]--> 
<!--[if IE 8]><html class="lt-ie9"><![endif]--> 
<!--[if gt IE 8]><!--><html><!--<![endif]--> 
<head> 
    <title>Page title here</title> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge"/> 

alguien más tendrá que hacer comentarios sobre por qué esto parece funcionar - es un misterio para mí

Cuestiones relacionadas