2011-11-04 12 views
23

Validé mi sitio web utilizando validator.w3.orgHTML 5 Validación W3C

Se reportó el siguiente error:

Line 5, Column 67: Bad value X-UA-Compatible for attribute http-equiv on element meta. 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" > 

Si yo no tenga esa etiqueta META, que todos los visitantes verán IE9 mi sitio web en modo Quirks, y quiero evitar eso.

¡Cualquier ayuda sería muy apreciada!

+0

"Los visitantes de IE9 verán mi sitio web en el modo Quirks" ... ¿estás seguro de eso? –

+2

Sí. Sin esa metaetiqueta, el modo de documento predeterminado está configurado en el modo Quirks. Probé esto en diferentes computadoras. –

+0

Creo que necesito leer más porque pensé que era el modo "IE9" por defecto. –

Respuesta

12

Siempre se puede poner el ajuste de X-UA-Compatible en las cabeceras HTTP reales en su lugar. La forma en que lo haga depende del servidor web que esté utilizando y de la infraestructura del lado del servidor que esté utilizando.

+0

Estoy usando ASP.NET MVC 3. ¿Podría darme algún ejemplo de código? ¡Gracias! –

+0

@ šljaker - No estoy familiarizado con ASP.NET MVC específicamente, pero en C# está en la línea de 'Response.AppendHeader (" X-UA-Compatible "," IE = edge, chrome = 1 ");' – Alohci

+2

Puede agregar esto a la sección web.config system.Webserver> httpProtocol> customHeaders también. – ScottE

8

Simplemente tendrá que aceptar el hecho de que si desea la asistencia de IE, tendrá que renunciar a la puntuación de validación perfecta.

Está bien, sin embargo, validity != quality

+1

puede establecer esto podría preservar la validez. – RedRoosterMobile

+0

Según [este enlace] (http://blog.yjl.im/2011/01/bad-value-x-ua-compatible-for-attribute.html), esto no está funcionando como se esperaba. – Benjamin

12

mismo problema aquí, pero mi solución es añadir la siguiente línea al archivo .htaccess:

Header set X-UA-Compatible "IE=edge" 

funciona muy bien para mí ...

2

Para los chicos con ASP.NET MVC

Una opción es usar Action Filter en controladores/acciones. Esto ralentiza un poco las respuestas del servidor, pero no sé los números exactos. Pero es una manera limpia de hacerlo:

/// 
/// Represents an attribute that is used to add HTTP Headers to a Controller Action response. 
/// 
public class HttpHeaderAttribute : ActionFilterAttribute 
{ 
    /// 
    /// Gets or sets the name of the HTTP Header. 
    /// 
    /// The name. 
    public string Name { get; set; } 

    /// 
    /// Gets or sets the value of the HTTP Header. 
    /// 
    /// The value. 
    public string Value { get; set; } 

    /// 
    /// Initializes a new instance of the class. 
    /// 
    /// The name. 
    /// The value. 
    public HttpHeaderAttribute(string name, string value) { 
     Name = name; 
     Value = value; 
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext) { 
     if(!filterContext.HttpContext.Response.Headers.AllKeys.Contains(Name, StringComparer.OrdinalIgnoreCase)) 
      filterContext.HttpContext.Response.AppendHeader(Name, Value); 
     base.OnResultExecuted(filterContext); 
    } 
} 

Sin embargo, absolutamente el mejor y más limpio manera para mí es el uso de web.config. Pon este código en <system.webServer> elemento:

<httpProtocol> 
    <customHeaders> 
    <!-- 
          http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ 
          Uncomment to serve cross-domain ajax requests 

          <add name="Access-Control-Allow-Origin" value="*" /> 
          --> 
    <!-- 
          Force the latest IE version, in various cases when it may fall back to IE7 mode 
          github.com/rails/rails/commit/123eb25#commitcomment-118920 
          Use ChromeFrame if it's installed for a better experience for the poor IE folk 
          --> 
    <add name="X-UA-Compatible" value="IE=Edge,chrome=1" /> 
    <!-- 
          Allow cookies to be set from iframes (for IE only) 
          If needed, uncomment and specify a path or regex in the Location directive 

          <add name="P3P" value="policyref=&quot;/w3c/p3p.xml&quot;, CP=&quot;IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT&quot;" /> 
          --> 
    <!-- A little extra security (by obscurity) --> 
    <remove name="X-Powered-By" /> 
    </customHeaders> 
</httpProtocol> 

Obviamente, esto sólo funciona en IIS7 +.

HTH

4

Para las personas que utilizan PHP, la manera de pasar este parámetro a través de la función de cabecera en PHP:

header('X-UA-Compatible: IE=edge,chrome=1'); 

Aquí está un una post with code + explanation.

5

La solución es muy sencilla y el tema puede incluir tan fácil en las plantillas de entidad /templates/su plantilla/urdimbre/sistemas/themes/head.php basta con abrir

de

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

a

<!--[if IE]> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<![endif]--> 
2

¿Has probado sin importarles lo que dicen los validadores de HTML sobre tu código? Eso usualmente funciona para mi