要素metaの属性http-equivのX-UA-Compatibleの値が不正です


110

私はmetaHTML5ボイラープレートが使用しているものと同じものを使用しており、W3C HTMLバリデーターは不平を言っています:

要素metaの属性http-equivに不正な値X-UA-Compatibleがあります。

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

このmetaタグの何が問題になっていますか?


6
これについての素敵なブログ投稿は次のとおりです
1

回答:


67

X-UA-Compatibleが「標準」HTML(仕様によって参照される公開編集可能なWikiページに表示されることを含むFSVOの「標準」)ではないか、ValidatorがそのWikiの現在のステータスで最新ではありません。

これを書いている時点では(20130326)X-UA-Compatibleは、Wikiページの次のセクションに表示されます。ドキュメント。」したがって、バリデーターはこの値を拒否するのに適切です。


8
間違ったwikiページ。あなたがリンクするのはのためのもの<meta name= ...です。以下のため<meta http-equiv=...のページですwiki.whatwg.org/wiki/PragmaExtensions
Alohci

6
正しいWikiページにはが含まれているX-UA-Compatibleため、代替の「バリデーターが最新ではありません」が適用されます。この点では、validator.nu(一般に最新であると言われています)も古くなっています。
Jukka K.Korpela、2013年

訂正ありがとうございます。メタ属性の値が2ページに分割されていることに気づかなかった。
クエンティン

1
バリデータにパッチを適用してサポートする方法の例については、私の回答を参照してくださいX-UA-Compatiblestackoverflow.com/a/21048010/1006963
darcyparker 2014年

どのようにしてw3cバリデーターから問題を修正できますか?タグを削除できますか?
クリッシュ

42

機能的に影響を与えずに技術的に有効にする(誰もが緑のファビコンを見るのが大好き)ようにしたい場合は、「if IE」タグでラップするだけで十分です。

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

22
Chrome FrameはIEの条件付きコメントを無視するため、これによりChrome Frameのサポートが事実上無効になります。jeffreybarke.net/ 2010/08 /…を
Jasper Moelker 2013年

5
@JasperMoelker:リンクを提供した記事に実際にChrome Frameの回避策が含まれていることはおそらく言及する価値があります。これは素晴らしいです:検証+ Chrome Frameのサポート!
ルーク、

5
いいえ、いいえ、これはX-UA-Compatibleを壊します。xn--mlform-iua.no/blog/...
brentonstrine

30

Aaron Laytonによるこのすばらしい記事で示唆されているように、1つの可能な解決策は、ヘッダーに修正サーバー側を実装することです。(すべての信用は彼に行くべきです、そして私は盗用するのではなく言い換えます...)

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

「Internet Explorerがこのラインに出くわすと、プラグインがインストールされている場合、最初に使用されているエンジンがChrome Frameに変更され、次にEdge(ブラウザーでサポートされる最も高いドキュメントモード)に変更されます。」

手順

  • ページの検証を修正します–これは単にタグを削除することで達成されます
  • レンダリング速度–ブラウザがタグを確認してモードを変更するのを待つ代わりに、適切なモードを応答ヘッダーとして事前に送信します。
  • Internet Explorerの修正のみが表示されていることを確認します。サーバー側のブラウザー検出を使用して、IEにのみ送信します

PHPにヘッダーを追加するには、これをページに追加するだけです。

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


または、次のように.htaccessファイルに追加することもできます。

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


元の記事へのリンク、可能性のある警告のコメントを確認してください。C#の実装も含まれます。

不正な値X-UA互換を修正しました

お役に立てれば!


1
この記事の執筆時点では、このソリューションはHTML5BP .htaccessファイルに実装されています。したがって、Apacheサーバーでmod_headersが有効になっている場合は<meta>、htmlファイルからを削除しても安全です。
Patrick James McDougle 14

私のようにSpring MVCを使用している場合でも、簡単に実行できます。あなたが探しているのは:ですresponse.addHeader("X-UA-Compatible", "IE=edge,chrome=1");が、これは完全なgithub gistです。
Paul Nelson Baker、

1
@PatrickJamesMcDougle これを機能させるには、Apacheサーバーでheadersとmodの両方を有効にする必要がありましたsetenvif
iglvzx

これがどこに追加されるかは重要ですか?それが一番最初のことでしょうか?
Staysee、2014

1
W3C HTMLバリデータのメンテナはこちら。「chrome = 1」を値に入れると、ヘッダーのチェックも(メタ要素のチェックとともに)追加したため、この回答の解決策は機能しなくなります。 HTML仕様に従って、いずれかの場所(メタ要素またはヘッダー)で許可される値は "IE = Edge"のみです。
sideshowbarker 2015


2

..これは良い答えでしょうか?

PHPでHTTPヘッダーを設定します。

これは私自身の作品ではありませんが、他の人にも役立つことを願っています。


7
リンクのみの回答は推奨されないことに注意してください(リンクは時間とともに古くなる傾向があります)。ここで回答を編集し、概要を追加することを検討してください。
bummi 2013

1

バリデータsrcコードをダウンロード/ビルドする場合、サポートを自分で追加できます。

以下をhtml5-meta-X-UA-Compatible.rnc)などのファイルに追加し、それをに含めますhtml5full.rnc

私はこれを行い、それは検証のためにうまく機能します。

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

,chrome=1正常に機能するメタタグから削除してください。バリデータ付き:

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

-1

私は同じ問題を抱えており、追加してその行全体を囲むことで状況が改善されました。

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

1
なぜ反対票が投じられるのか誰か知っていますか?それは実際にバリデーターを適切に動作させます。
Maciej Paprocki 14年

2
多分それは実際には何も達成しないからでしょう。1. IE10以降では、条件付きコメントは機能しません。2. X-UA-Compatibleは、新しいブラウザーで古いブラウザーをエミュレートするためのものです。つまり、この行の効果は次のとおりです。1. IE 10および11は、デフォルトモードを使用してレンダリングします(条件付きコメントを解析しないため)。3. IE <9、デフォルトモードを使用してレンダリングします(現在よりも新しいブラウザーをエミュレートできないため)
aleayr

また、コメント内にあるため、バリデーターが「適切に」機能することも追加します(したがって、バリデーターはそれを無視します)。
aleayr 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.