繁体   English   中英

错误值X-UA-兼容元素元素属性http-equiv

[英]Bad value X-UA-Compatible for attribute http-equiv on element meta

我使用了与HTML5 Boilerplate相同的meta数据,并且W3C HTML验证器抱怨:

错误值X-UA-兼容元素元素属性http-equiv。

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

这个meta标记有什么问题?

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

在撰写本文时(20130326),X-UA-Compatible出现在维基页面的一个部分下面,该部分声明:“以下建议的扩展程序尚未符合HTML规范中的所有注册要求,因此尚未被允许有效文档“。 因此验证器拒绝此值是正确的。

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

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

一种可能的解决方案是在头文件中实现修复服务器端,正如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兼容一劳永逸

希望这可以帮助!

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

使用PHP设置HTTP标头:

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

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=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

请从meta标签中删除,chrome=1 ,它将正常工作。 使用验证器:

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

我有同样的问题,并添加并围绕整个线路纠正了这种情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM