IE8 并发症
A List Apart 曾介绍 ,IE8除doctype外会使用基于meta元素的模式转换作为模式选择的因素之一。(请看Ian Hickson、David Baron、David Baron again、Robert O’Callahan 和 Maciej Stachowiak的评论。)
IE8有4种模式:IE5.5怪癖模式、IE7标准模式、IE8 准标准模式 和IE8标准模式。模式的选择取决于来自几个方面的数据:doctype、meta元素、HTTP头、来自微软的定期下载数据、局域网域、用户所做设置、局域网管理员所做设置、父框架的模式(如果有)和地址栏兼容视图按钮被用户触发。(对于嵌入该引擎的其他应用,模式也取决于嵌入的应用。)
幸运的是如果出现下列情况,IE8大体上会像其他浏览器一样使用doctype嗅探:
-
作者没有设置X-UA-Compatible HTTP头
作者没有设置X-UA-Compatible meta标签
微软没有在黑名单中放置该站点的域名
局域网管理员没有把该站点放置到黑名单上
用户没有按下兼容视图按钮(Compatibility View button) (或以其他方式添加到某个特定的用户黑名单中)
该站点不在局域网域中
用户没有选择在IE7中显示所有站点
页面没有通过frame嵌入到兼容模式的页面中
上述除两个关于X-UA-Compatible的情况外,IE8像IE7一样执行doctype嗅探。IE7仿真( IE7 emulation)叫兼容视图。
在 X-UA-Compatible 情况下,IE8的行为和其他浏览器完全不同。想看本页的附录或PDF和PNG格式的流程图。
不幸的是,没有 X-UA-Compatible的HTTP头或meta标签,即使使用了合适的doctype,IE8让用户无意间使页面从IE8的标准模式降到IE7模式,这是一种仿真的IE7标准模式。更糟糕的是,局域网管理员也可以这么做。微软也可以把你所用的所有域名到列入黑名单。
为了对付这些影响,doctype是不够的,你需要X-UA-Compatible HTTP头和meta标签。
下面的简单指南是针对已经有doctype在其他浏览器触发标准模式或者准标准模式的新的text/html文档如何选择X-UA-Compatible HTTP头或meta标签的:
- 你的域名没有在微软的黑名单上,你更关注是没有浏览器专属的令人讨厌的东西而不是确保用户无法回退去呈现IE7的行为。 你不需要包括X-UA-Compatible HTTP头或meta标签。 你的域名在微软的黑名单中,由于你域名中的其他作者破坏了站点或许导致用户对整个域启用了兼容视图,你担心Google或Digg用frame嵌入你的站点或你想确保用户无法使用兼容视图 首先,在你的页面包含后面的meta元素(它在HTML5中是非法的) <meta http-equiv="X-UA-Compatible" content="IE=Edge"> (在任何脚本元素前),或者设置后面的HTTP头:X-UA-Compatible: IE=Edge 你的站点在IE7中工作但在IE8中破坏 首先,在你的页面包含后面的meta元素(它在HTML5中是非法的)









