如果一个网页开头有什么区别
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
如果页面以 . 开头
<!DOCTYPE html>
<html>
<head>
<!-- without X-UA-Compatible meta -->
如果没有区别,我想我可以忽略 X-UA-Compatible
元 Headers ,因为我只想在所有IE版本中以大多数标准模式呈现它 .
12 回答
2.1.3.5 X-UA兼容性元标记和HTTP响应标头
此功能不会在任何版本的Microsoft Edge中实现 .
见https://msdn.microsoft.com/en-us/library/ff955275(v=vs.85).aspx
是的,我知道我迟到了,但我只是遇到了一些问题和讨论,最后我的老板让我从我一直在处理的所有文件中删除了
X-UA-Compatible
标签 .如果此信息已过期或不再相关,请更正我 .
我认为微软的这张图解释了所有 . 为了告诉IE如何呈现内容,!DOCTYPE必须使用X-UA-Compatible元标记 . !DOCTYPE本身对更改IE文档模式没有影响 .
http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png
使用此命令强制IE隐藏地址栏中恼人的浏览器兼容性按钮:
不同之处在于,如果仅指定
DOCTYPE
,则IE的兼容性视图设置优先 . 默认情况下,无论DOCTYPE
如何,这些设置都会强制所有Intranet站点进入兼容性视图 . 还有一个复选框,可以为所有网站使用兼容性视图,而不管DOCTYPE
.X-UA-Compatible
会覆盖兼容性视图设置,因此无论浏览器设置如何,页面都将以标准模式呈现 . 这迫使标准模式:内联网页面
当计算机管理员选择“在兼容性视图中显示所有网站”作为默认设置时,
外部网页 - 认为大公司,政府,大学
当你无意中结束了Microsoft Compatibility View List
用户已将您的网站手动添加到兼容性视图设置中的列表的情况
DOCTYPE
独自不能那样做;在这些情况下,无论DOCTYPE
如何,您都将处于兼容性视图模式之一 .如果同时指定了
meta
标记和HTTP标头,则meta
标记优先 .此答案基于检查IE8,IE9和IE10中决定文档模式的完整规则 . 请注意,查看
DOCTYPE
是决定文档模式的最后一个回退 .只说一句话 Instruct Internet Explorer to use its latest rendering engine
使用
content=
"IE=edge,chrome=1" 跳过其他X-UA-Compatible
模式No compatibility icon
IE9地址栏未显示Compatibility View button
并且该页面也不会显示混乱的不合适的菜单,图像和文本框 .
Features
在IE8上启用
javascript::JSON.parse()
需要此元标记(即使存在
<!DOCTYPE html>
)Correctness
渲染/执行现代HTML / CSS / JavaScript更有效(更好) .
Performance
Trident rendering engine应该在边缘模式下运行得更快 .
用法
In your HTML
IE=edge
表示IE应该使用其渲染引擎的最新(边缘)版本chrome=1表示IE应该使用Chrome rendering engine(如果已安装)
Or better in the configuration of your web server:
(另见RiaD's answer)
由pixeline提议的
由Stef Pause提议的
由Lucas Riutzel提议的
Microsoft推荐自IE11以来的Edge模式
正如Lynda(注释)所注意到的,Compatibility changes in IE11建议使用Edge模式:
But the position of Microsoft was not clear. 另一个MSDN page did not recommend Edge mode:
相反,Microsoft建议使用
<!DOCTYPE html>
:正如Ricardo解释的那样(在下面的评论中)任何DOCTYPE(HTML4,XHTML1 ......)都可用于触发标准模式,而不仅仅是HTML5的DOCTYPE . 重要的是始终在页面中有一个DOCTYPE .
Clara Onager甚至在Specifying legacy document modes的旧版本中注意到:
这是令人困惑的Usman Y以为Clara Onager在谈论:
Well... In the rest of this answer I give more explanations why using content="IE=edge,chrome=1" is a good practice in production.
历史
多年(2000年至2008年),IE market share was more than 80% . IE v6 被认为是事实上的标准(2003的市场份额为80%至97%,IE6仅为2004, 2005 and 2006,所有IE版本的市场份额更多) .
由于IE6不尊重Web standards,开发人员 had 使用IE6测试他们的网站 . 对于微软(MS)而言,这种情况非常好,因为网络开发人员必须使用MS产品(例如,IE不能在不购买Windows的情况下使用),并且保持不合规更为有利可图(即微软希望成为 the 标准不包括其他公司) .
因此,许多网站仅符合IE6标准,并且由于IE不符合Web标准,所有这些网站在符合标准的浏览器上都没有很好地呈现 . 更糟糕的是,many sites required only IE .
然而,在这个时候,Mozilla开始了Firefox开发,尽可能地尊重所有Web标准(其他浏览器实现了IE6渲染页面) . 随着越来越多的Web开发人员想要使用新的Web标准功能,越来越多的网站受到Firefox的支持而不是IE .
当IE市场份额下降时,MS意识到保持标准不兼容并不是一个好主意 . 因此MS开始发布新的IE版本(IE8 / IE9 / IE10),越来越多的Web标准 .
网络不兼容的问题
但问题是为IE6设计的所有网站:微软无法发布与这些旧的IE6设计网站不兼容的新IE版本 . MS没有设计网站的IE版本,而是要求开发人员在其网页中添加额外的数据(
X-UA-Compatible
) .IE6仍在2016年使用
如今,IE6仍然使用(0.7% in 2016)(2014年1月为4.5%),一些互联网网站仍然符合IE6标准 . 一些Intranet网站/应用程序使用IE6进行测试 . 某些Intranet网站仅在IE6上100%正常运行 . 这些公司/部门倾向于推迟迁移成本:其他优先事项,没有人不再知道网站/应用程序是如何实现的,遗留网站/应用程序的所有者破产了......
中国占2013年IE6使用量的50%,但在未来几年可能会改变为Chinese Linux distribution is being broadcast .
对您的网络技能充满信心
如果您(尝试)尊重Web标准,您可以随时使用
http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"
. 要保持与旧浏览器的兼容性,请避免使用最新的Web功能:使用您要支持的最旧浏览器支持的子集 . 或者如果你想更进一步,你可以采用Graceful degradation,Progressive enhancement和Unobtrusive JavaScript等概念 . (您可能也很高兴阅读What should a web developer consider? . )不要关心最好的IE版本渲染:这不是你的工作,因为浏览器必须符合web标准 . 如果您的网站符合标准并使用适度的最新功能,那么 browsers have to be compliant with your website .
此外,由于有许多活动要杀死IE6(IE6 no more,MS campaign),现在你可以避免浪费时间进行IE测试!
个人IE6体验
在2009 - 2012年,我在一家使用IE6作为官方单一浏览器的公司工作 . 我不得不为IE6实现一个Intranet网站 . 我决定尊重Web标准,但使用支持IE6的子集(HTML / CSS / JS) .
这很难,但是当公司改用IE8时,网站仍然很好,因为我使用了Firefox和firebug来检查网络标准的兼容性;)
October 2015 Update
这个答案是几年前发布的,现在问题真的应该是你应该考虑在你的网站上使用
X-UA-Compatible
标签吗?微软对其浏览器所做的更改(更多内容见下文) .根据您支持的Microsoft浏览器,您可能不需要继续使用
X-UA-Compatible
标记 . 如果您需要支持IE9或IE8,那么我建议使用该标签 . 如果您只支持最新的浏览器(IE11和/或Edge),那么我会考虑完全删除此标签 . 如果您使用Twitter Bootstrap并且需要消除验证警告,则此标记必须以其指定的顺序出现 . 其他信息如下:X-UA-Compatible
元标记允许Web作者选择应该呈现页面的Internet Explorer版本 . IE11改变了这些模式;请参阅下面的IE11注释 . Microsoft Edge,将在IE11之后发布的浏览器,在某些情况下只会尊重X-UA-Compatible
元标记 . 请参阅下面的Microsoft Edge注释 .根据Microsoft的说法,当使用
X-UA-Compatible
标签时,它应该在文档_374105中尽可能高:以下是您的选择:
"IE=edge"
"IE=11"
"IE=EmulateIE11"
"IE=10"
"IE=EmulateIE10"
"IE=9"
“IE = EmulateIE9
"IE=8"
"IE=EmulateIE8"
"IE=7"
"IE=EmulateIE7"
"IE=5"
为了尝试理解每个含义,这里是Microsoft提供的定义:
IE10 NOTE: 从IE10开始,怪癖模式的行为与早期版本的浏览器不同 . 在IE9及更早版本中,怪癖模式将网页限制为IE5.5支持的功能 . 在IE10中,quirks模式符合HTML5规范中指定的差异 .
就个人而言,我总是选择
http-equiv="X-UA-Compatible" content="IE=edge"
元标记,因为旧版本有很多错误,我不希望IE决定进入"Compatibility mode"并将我的网站显示为IE7 vs IE8或9.我总是喜欢最新版本的IE .IE11
来自Microsoft:
Microsoft Edge (Replacement for Internet Explorer that comes bundled with Windows 10)
有关"Edge"版IE的
X-UA-Compatible
元标记的信息 . From Microsoft:由于Microsoft Edge中的更改在大多数情况下不再支持文档模式,因此Microsoft有一个tool来扫描您的站点以检查它是否具有与Edge不兼容的代码 .
Chrome=1 Info for IE
还有
chrome=1
,您可以使用或与上述选项之一一起使用,如:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
.chrome=1
适用于Google的Chrome Frame,定义为:但是要使该插件工作,您必须在
X-UA-Compatible
meta标签中使用chrome=1
.有关Chrome Frame的更多信息,请访问here .
Note: Google Chrome Frame仅适用于IE6 through IE9,于2014年2月25日停用 . 更多信息可以在here找到 . 感谢@mck的链接 .
Validation:
HTML5 :
仅当使用
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
时,页面才会使用_374139进行验证 . 对于其他值,它将抛出错误:A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.
换句话说,如果你有IE=edge,chrome=1
它将无法验证 . 我完全忽略了这个错误,因为现代浏览器只是忽略了这行代码 .如果您必须拥有完全有效的代码,请考虑通过设置HTTP标头在服务器级别执行此操作 . 微软表示,
If both of these instructions are sent (meta and HTTP), the developer's preference (meta element) takes precedence over the web server setting (HTTP header).
请参阅olibre's answer或bitinn's answer了解有关如何设置HTTP标头的更多详细信息 .XHTML
只要标签正确关闭(即
/>
vs>
),使用_374147时验证就没有问题 .Twitter Bootstrap
自至少2014年以来,Bootstrap团队强烈建议使用此标记,并且Bootlint,twbs团队创作的linter在省略标记时继续抛出warning . linter区分警告和错误,因此省略此标记的严重性可能被认为是次要的 .
有关
X-UA-Compatible
的详细信息,请参阅Microsoft的Website Defining Document Compatibility .有关IE支持的更多信息,请参阅caniuse.com .
有关Twitter Bootstrap要求的更多信息,请参阅bootlint项目wiki page .
由于我无法在标记的答案中添加评论,我将在此处发布 .
除了正确的答案,您确实可以通过验证 . 由于此元标记仅针对IE,因此您需要做的是添加IE条件 .
这样做就像添加任何其他IE条件语句一样,只适用于IE,不会影响其他浏览器 .
为了完整起见,您实际上不必将其添加到HTML(HTML5中未知的http-equiv)
这样做,永远不要回头( apache 的第一个例子, nginx 的第二个例子)
要使此行按预期工作,请确保:
<head>
之后的第一个元素在元标记之前使用
<html>
元素上否则一些IE版本会忽略它 .
UPDATE
这两条规则已经过简化,但很容易记住和验证 . 尽管MSDN文档声明您可以在此之前放置 Headers 和其他元标记,但我不建议这样做 .
How make it work with conditional comments.
Interesting article about the order of elements in the head.(blogs.msdn.com,用于IE)
REFERENCE
来自MSDN documentation:
如果您在与IE服务器相同的网络中使用您的网站,尽管有DOCTYPE,IE仍会切换到 compability mode .
添加
meta http-equiv="X-UA-Compatible" content="IE=Edge"
disables 这种不受欢迎的行为 .这是LITERALLY 1 google query away,但是这里是:
http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx
搜索结果中还有: