Hatalı değer X-UA-Meta öğesindeki http-equiv özelliği için uyumlu


110

Ben metaHTML5 Boilerplate'in kullandığı aynısını kullandım ve W3C HTML doğrulayıcı şikayet ediyor:

Hatalı değer X-UA-meta öğesindeki http-equiv özelliği için uyumlu.

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

Bu metaetiketin nesi var ?


6
İşte bununla ilgili güzel bir blog yazısı (aynı zamanda aldığım ilk arama sonucuydu): blog.yjl.im/2011/01/…
ComFreek

Yanıtlar:


67

Ya X-UA-Uyumlu "standart" HTML değildir (belirtim tarafından referans verilen herkese açık olarak düzenlenebilir bir wiki sayfasında görünmeyi içeren FSVO "standardı" ) veya Doğrulayıcı o wikinin mevcut durumu ile güncel değil.

Yazma sırasında (20130326) X-UA-Compatible, wiki sayfasında şu ifadelerin bulunduğu bir bölümün altında görünür: "Aşağıdaki önerilen uzantılar henüz HTML spesifikasyonundaki tüm kayıt gereksinimlerine uymuyor ve bu nedenle henüz geçerli olmalarına izin verilmiyor belgeler." Yani doğrulayıcı bu değeri reddetmekte haklıdır.


8
Yanlış wiki sayfası. Bağlandığınız kişi içindir <meta name= .... İçin <meta http-equiv=...sayfa olduğu wiki.whatwg.org/wiki/PragmaExtensions
Alohci

6
Doğru wiki sayfası içerir X-UA-Compatible, bu nedenle alternatif "Doğrulayıcı güncel değil" geçerlidir. Hatta validator.nu bu konuda güncel değil (olmuştur daha yukarı genel olarak bugüne kadar olduğu söylenen).
Jukka K. Korpela

Düzeltmeler için teşekkürler. Meta öznitelik değerlerinin iki sayfaya bölündüğünü fark etmemiştim.
Quentin

1
Doğrulayıcının desteklenmesi için nasıl yama yapılacağına dair bir örnek için cevabıma bakın X-UA-Compatible. stackoverflow.com/a/21048010/1006963
darcyparker

peki w3c doğrulayıcısından sorunu nasıl çözebilirim .. etiketi kaldırabilir miyim?
Krish

42

Herhangi bir işlevi etkilemeden teknik olarak geçerli kılmak istiyorsanız (herkes yeşil favicon'u görmeyi seviyor), bunu bir "if IE" etiketine sarmalamanız gerekir.

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

22
Chrome Frame, IE koşullu yorumlarını yok saydığından, bu, Chrome Frame desteğinizi etkili bir şekilde devre dışı bırakır, bkz. Jeffreybarke.net/2010/08/…
Jasper Moelker

5
@JasperMoelker: Muhtemelen bağlantıyı sağladığınız makalenin aslında Chrome Frame için bir geçici çözüm içerdiğinden bahsetmeye değer, ki bu harika: Doğrulama + Chrome Çerçeve desteği!
Luke

5
Hayır hayır hayır, bu X-UA-Uyumlu'yu bozar. xn--mlform-iua.no/blog/…
brentonstrine

30

Olası bir çözüm, Aaron Layton'ın bu güzel yazısında önerildiği gibi, başlıkta bir düzeltme sunucu tarafı uygulamaktır . (Tüm övgü ona gitmeli ve intihal yerine başka sözcüklerle açıklayacağım ...)

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

"Internet Explorer bu çizgiyle karşılaştığında, kullanılan motoru, eklenti yüklüyse önce Chrome Frame'e ve ardından Edge'e (tarayıcının desteklenen en yüksek belge modu) değiştirecektir."

Adımlar :

  • Sayfa doğrulamasını düzeltin - Bu, yalnızca etiketi kaldırarak elde edilir
  • Oluşturma hızı - Tarayıcının etiketi görmesini ve ardından modları değiştirmesini beklemek yerine doğru modu yanıt başlığı olarak önceden göndereceğiz
  • Yalnızca Internet Explorer için düzeltmeyi gösterdiğimizden emin olun - Yalnızca bazı sunucu tarafı tarayıcı algılamalarını kullanacağız ve yalnızca IE'ye göndereceğiz

Başlığı PHP'ye eklemek için bunu sayfamıza ekleyebiliriz:

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
        header('X-UA-Compatible: IE=edge,chrome=1');


Ya da .htaccess dosyanıza şu şekilde ekleyebilirsiniz:

<FilesMatch "\.(htm|html|php)$">
    <IfModule mod_headers.c>
        BrowserMatch MSIE ie
        Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
    </IfModule>
</FilesMatch>


Orijinal makaleye bağlantı, olası uyarılar için yorumları kontrol edin. Ayrıca C # için bir uygulama içerir.

Kötü değeri sabitleyin X-UA-Uyumlu

Bu yardımcı olur umarım!


1
Bu yazının yazıldığı sırada, bu çözüm HTML5BP .htaccess dosyasında uygulanmıştır. Bu nedenle, Apache sunucunuzda mod_headers etkinleştirilmişse, <meta>html dosyasından güvenle kaldırabilirsiniz .
Patrick James McDougle

Benim gibi Spring MVC kullanıyorsanız, yapmak hala oldukça kolaydır. Aradığınız:, response.addHeader("X-UA-Compatible", "IE=edge,chrome=1");ancak işte tam bir github özeti .
Paul Nelson Baker

1
@PatrickJamesMcDougle ben hem etkinleştirmek zorunda kaldı headersve setenvifişe bu olsun benim Apache sunucusunda mods.
iglvzx

Bunun nereye eklendiğinin önemi var mı? İlk şey olmalı mı?
Staysee

1
W3C HTML doğrulayıcı bakımcısı burada. Değere "chrome = 1" koyarsanız, bu yanıttaki çözüm artık işe yaramayacaktır, çünkü o zamandan beri başlık için de bir kontrol ekledik (meta öğesinin kontrolü ile birlikte) ve HTML spesifikasyonuna göre, herhangi bir yerde (meta öğe veya başlık) izin verilen tek değer "IE = Edge" dir.
sidehowbarker



1

Doğrulayıcı src kodunu indirir / oluşturursanız, kendiniz destek ekleyebilirsiniz.

Aşağıdakileri gibi bir dosyaya ekleyin html5-meta-X-UA-Compatible.rncDaha sonra ekleyin html5full.rnc.

Bunu yaptım ve doğrulama için güzel çalışıyor.

meta.http-equiv.X-UA-Compatible.elem =
  element meta { meta.inner & meta.http-equiv.X-UA-Compatible.attrs }
  meta.http-equiv.X-UA-Compatible.attrs =
    ( common.attrs.basic
      & common.attrs.i18n
      & common.attrs.present
      & common.attrs.other
      & meta.http-equiv.attrs.http-equiv.X-UA-Compatible
      & meta.http-equiv.attrs.content.X-UA-Compatible
      & ( common.attrs.aria.role.presentation
        | common.attrs.aria.role.menuitem
        )?
    )
    meta.http-equiv.attrs.http-equiv.X-UA-Compatible = attribute http-equiv {
      xsd:string {
        pattern = "X-UA-Compatible"
      }
    }
    meta.http-equiv.attrs.content.X-UA-Compatible = attribute content {
      xsd:string {
        pattern = "IE=((edge)|(EmulateIE(7|8|9|10))|7|8|9|10|11)(,chrome=(1|0))?"
      }
    }

common.elem.metadata |= meta.http-equiv.X-UA-Compatible.elem

0

Lütfen ,chrome=1meta etiketinden kaldırın , düzgün çalışacaktır. Doğrulayıcı ile:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

-1

Ben de aynı sorunu yaşadım ve bu çizginin tamamını eklemek ve çevrelemek durumu düzeltti.

<!--[if IE]><meta http-equiv="x-ua-compatible" content="IE=9" /><![endif]-->

1
Neden olumsuz oy verildiğini bilen var mı? Doğrulayıcının düzgün çalışmasını sağlar.
Maciej Paprocki

2
Muhtemelen hiçbir şey başaramadığı içindir. 1. Koşullu yorumlar IE10 ve üzeri sürümlerde çalışmaz. 2. X-UA-Uyumlu, yeni tarayıcıların eskileri taklit etmesini sağlamak içindir. Yani bu satırın etkili bir şekilde söylediği şudur: 1. IE 10 ve 11, varsayılan modu kullanarak render edin (artık koşullu yorumları çözümlemedikleri için) 2. IE 9, IE 9 olarak render (yani, çoğu durumda varsayılan modu). 3. IE <9, varsayılan modu kullanarak render (çünkü kendilerinden daha yeni bir tarayıcıyı taklit
edemezler

Ayrıca, bir yorumun içinde olduğu için doğrulayıcının 'düzgün' çalışmasını sağladığını da ekleyeceğim (bu nedenle doğrulayıcı onu görmezden gelir).
aleayr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.