2011-11-04 13 views
23

I zatwierdzone moją stronę internetową za pomocą validator.w3.orgwalidacja W3C HTML 5

Poinformowano następujący błąd:

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

Jeśli nie uwzględnić ten tag META, niż wszyscy odwiedzający IE9 będzie widać moją stronę w trybie Quirks i chcę temu zapobiec.

Każda pomoc będzie bardzo ceniona!

+0

"Odwiedzający stronę IE9 zobaczą moją stronę w trybie Quirks" ... jesteś tego pewien? –

+2

Tak. Bez tego metatagu domyślny tryb dokumentu jest ustawiony na tryb Quirks. Testowałem to na różnych komputerach. –

+0

Chyba muszę przeczytać więcej, ponieważ domyślnie myślałem, że jest to tryb "IE9". –

Odpowiedz

12

Zawsze możesz umieścić X-UA-Compatible ustawienie do rzeczywistych nagłówków HTTP zamiast. Sposób, w jaki to robisz, zależy od używanego serwera WWW i jakiej, jeśli w ogóle, struktury po stronie serwera, z której korzystasz.

+0

Używam ASP.NET MVC 3. Czy mógłbyś podać mi przykład kodu? Dzięki! –

+0

@ šljaker - Nie znam konkretnie środowiska ASP.NET MVC, ale w języku C# jest to linia 'Response.AppendHeader (" X-UA-Compatible "," IE = edge, chrome = 1 ");' – Alohci

+2

Możesz dodać to również do sekcji web.config system.Webserver> httpProtocol> customHeaders. – ScottE

8

Po prostu musisz zaakceptować fakt, że jeśli chcesz korzystać z IE, musisz zrezygnować z doskonałego wyniku weryfikacji.

To dobrze chociaż, validity != quality

+1

można ustawić może to zachować ważność. – RedRoosterMobile

+0

Zgodnie z [ten link] (http://blog.yjl.im/2011/01/bad-value-x-ua-compatible-for-attribute.html), to nie działa zgodnie z oczekiwaniami. – Benjamin

12

sam problem tutaj, ale mój rozwiązaniem jest dodanie następującej linii do mojego pliku .htaccess:

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

działa świetnie dla mnie ...

2

dla facetów przy użyciu ASP.NET MVC

Jedną z opcji jest użycie Filtry akcji na kontrolerach/akcjach. To spowalnia reakcje serwera, ale nie znam dokładnych liczb. Ale to jest czysty sposób to zrobić:

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

Jednak absolutnie najlepszy i najczystszy sposób dla mnie jest za pomocą web.config. Umieść ten kod na <system.webServer> element:

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

Oczywiście działa to tylko w IIS7 +.

HTH

4

Dla osób korzystających z PHP, sposób przekazać ten parametr poprzez funkcję nagłówka w PHP:

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

Oto a a post with code + explanation.

5

Rozwiązanie jest bardzo proste i może zawierać motyw ten jest łatwy w szablonach fabularnych właśnie otwarty/Szablony/Szablon/osnowa/Systemy/themes/head.php

z

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

to

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

Czy próbowałeś już nie wiedzieć, co walidatory HTML mówią o Twoim kodzie? To zwykle działa dla mnie.