2011-11-04 3 views
23

j'ai validé mon site en utilisant validator.w3.orgHTML 5 validation w3c

Il a signalé l'erreur suivante:

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 je ne comprend pas cette balise META, que tous les visiteurs verront IE9 mon site web en mode Quirks, et je veux éviter cela.

Toute aide serait grandement appréciée!

+0

"Les visiteurs de IE9 verront mon site en mode Quirks" ... en êtes-vous sûr? –

+2

Oui. Sans cette balise meta, le mode de document par défaut est défini sur le mode Quirks. J'ai testé cela sur différents ordinateurs. –

+0

Je suppose que j'ai besoin de lire plus parce que je pensais que c'était le mode "IE9" par défaut. –

Répondre

12

Vous pouvez toujours mettre le paramètre X-UA-Compatible dans les en-têtes HTTP réels au lieu. La façon dont vous le faites dépend du serveur Web que vous utilisez et, le cas échéant, de l'infrastructure côté serveur que vous utilisez.

+0

J'utilise ASP.NET MVC 3. Pourriez-vous s'il vous plaît me donner un échantillon de code? Merci! –

+0

@ šljaker - Je ne suis pas familier avec ASP.NET MVC en particulier, mais en C# il est sur le modèle de 'Response.AppendHeader (" Compatible X-UA "," IE = edge, chrome = 1 ");' – Alohci

+2

Vous pouvez également l'ajouter à la section system.config.Webserver> httpProtocol> customHeaders. – ScottE

8

Vous devrez juste accepter le fait que si vous voulez le support d'IE, vous devrez abandonner le score de validation parfait.

Il est bien que, validity != quality

+1

vous pouvez définir cela pourrait préserver la validité. – RedRoosterMobile

+0

Selon [ce lien] (http://blog.yjl.im/2011/01/bad-value-x-ua-compatible-for-attribute.html), cela ne fonctionne pas comme prévu. – Benjamin

12

Même problème ici, mais ma solution est d'ajouter la ligne suivante dans mon fichier .htaccess:

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

fonctionne très bien pour moi ...

2

Pour les gars en utilisant ASP.NET MVC

Une option consiste à utiliser le filtre d'action sur les contrôleurs/actions. Cela ralentit un peu les réponses du serveur mais je ne connais pas les chiffres exacts. Mais il est une façon propre de le faire:

/// 
/// 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); 
    } 
} 

Cependant, avec les meilleures conditions et le plus propre pour moi est d'utiliser web.config. Mettez ce code dans l'élément <system.webServer>:

<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> 

Il est évident que cela ne fonctionne que dans IIS7 +.

HTH

4

Pour les personnes qui utilisent PHP, la façon de passer ce paramètre par la fonction d'en-tête en PHP:

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

Voici un un post with code + explanation.

5

La solution est très simple et le thème peut inclure ce facile dans les modèles de fonctionnalité simplement ouvrir/templates/votre kit graphique/chaîne/systèmes/thèmes/head.php

de

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

à

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

Avez-vous essayé de ne pas vous soucier de ce que les valideurs HTML disent de votre code? Cela fonctionne habituellement pour moi.