111

我使用了与metaHTML5 Boilerplate 相同的东西,W3C HTML 验证器抱怨:

元素元上属性 http-equiv 的错误值 X-UA-Compatible。

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

这个meta标签有什么问题?

4

8 回答 8

67

X-UA-Compatible 不是“标准”HTML(FSVO“标准”涉及出现在规范引用的可公开编辑的 wiki 页面上)或者验证器不是最新的该 wiki 的当前状态。

在撰写本文时 (20130326) X-UA-Compatible 出现在 wiki 页面上的一个部分下:“以下提议的扩展尚未符合 HTML 规范中的所有注册要求,因此尚未允许有效文件。” 所以验证者拒绝这个值是正确的。

于 2013-01-07T15:14:12.460 回答
42

如果您希望使其在技术上有效(每个人都喜欢看到绿色图标)而不影响任何功能,您应该能够将其包装在“if IE”标签中。

<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
于 2013-04-24T05:38:14.847 回答
30

一种可能的解决方案是在标头中实现修复服务器端,正如Aaron Layton的这篇精彩文章中所建议的那样。(所有的功劳都应该归功于他,我会转述而不是抄袭......)

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

希望这可以帮助!

于 2013-11-11T11:10:53.033 回答
2

..这可能是一个很好的答案吗?

使用 PHP 设置 HTTP 标头:

这不是我自己的工作,但我希望它对其他人也有用。

于 2013-09-08T19:58:32.293 回答
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
于 2014-01-10T15:23:29.253 回答
1
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

有关可能的修复,请参阅本文

于 2014-02-12T15:34:13.563 回答
0

,chrome=1从元标记中删除它会正常工作。使用验证器:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
于 2016-12-31T16:57:59.687 回答
-1

我遇到了同样的问题,添加并围绕整条线纠正了这种情况。

<!--[if IE]><meta http-equiv="x-ua-compatible" content="IE=9" /><![endif]-->
于 2014-01-28T21:30:05.023 回答