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.