Google额外提供的一些IE-Specific模式当安装了Google Chrome Frame后,IE6/7/8/9(不包括Windows8以及2013年2月的Windows7上的IE10)还可提供以下这些额外的模式。
此模式相当于Google Chrome上的怪癖模式。
此模式相当于Google Chrome上的标准模式。
此模式相当于Google Chrome上的近乎标准模式。 非Web模式有些模式还提供了一些与Web内容不相关的模式。在这里提到这些模式仅仅出于对此文档的完整性考虑。包括Opera的WML2.0模式,Mac OS X 10.5上WebKit浏览器上的特殊模式(用于传统的Dashboard widgets,或许这个模式目前仍有更新,我没有考察不是很确定)。以及为Mac OS X上内嵌WebKit浏览器的应用程序单独提供的模式。 模式的影响模式的主要影响如下: 页面布局除IE外,对于text/html类型的模式主要影响样式表布局以及样式系统。例如,表格内不会继承样式表;在IE和Opera的老版本中的怪癖模式下,盒模型变成了IE5.5的盒模型。本文档并不会枚举所有的怪癖布局,你可以查阅 Mozilla文档 以及 怪癖模式标准 获得完整列表。 在近乎标准模式中(在所有包含此模式的浏览器中),仅含有图片的单元格高度的计算方式与标准模式不同。 在XML模式中,选择器对查询条件的大小写有不相同的处理行为,另外,对于那些没有实现更多的样式表规范的老版本浏览器中,并不包含对body元素的特殊规则。 内容解析也有一些差异会影响到HTML和CSS的解析,并且可能会导致一些正常的页面被错误的解析。 这些差异会随着对布局的影响而同时产生影响。重要是要知道怪癖模式和标准模式的主要差别在于CSS布局和CSS的解析,而不是对HTML的解析。对于已经 兼容HTML5的浏览器,也有一些关于HTML解析的差异。 一些人会把标准模式误认为是“严格解析模式”,他们会觉得这样的话,浏览器会强制遵守HTML语法规则,会对HTML标记的正确性进行评估。事实上 既然在标准模式下,浏览器仍会对HTML标签进行必要的修复。(2000年夏,Netscape 6 发布前,Gecko浏览器确实包含一些强制按HTML语法规则进行解析的模式,其中一种模式称为“标准定义”,这些模式并不能兼容目前的网页内容,已经过 期了。) 另 外一个常见的误解是关于解析XHTML的。大家通常认为声明为XHTML的doctype会带来不同的解析。事实上XHTML文档也是text/html 类型的,也只是“蛋花标签汤”而已,到处都是额外的斜线》只有文档以XML类型(如application/xhtml+xml或application /xml)输出时才会触发与HTML解析完全不同的XML模式的解析。
脚本虽然怪癖模式主要影响的是CSS,但是还有一些脚本也会受到影响。直到Firefox14,其近乎标准模式下,还是不能直接使用标签的ID来引用标 签对象。在Firefox的怪癖模式中有document.all对象,但是在其它模式中却没有该对象。当在IE中模拟低版本IE时,这些影响更搞笑。 在XML模式中,一些DOM API表现很不一样,因为对XML的DOM API与HTML是完全不同的,唉,实在很遗憾。 doctype嗅探(也叫doctype转换)现代浏览器使用doctype嗅探来决定text/html文档的引擎模式。这意味着模式的选择是基于HTML文档开始的文档类型声明(或缺少)。(这不适于使用XML文档类型的文档。) 文档类型声明(doctype)是SGML的语法伪造,SGML是个旧式的标记框架,HTML5之前的HTML就是依据其定义的。HTML4.01规范中,文档类型声明描述的是HTML的版本信息。尽管名字叫“文档类型声明”且HTML 4.01规范所描述的是关于“版本信息”,文档类型声明并不适用把SGML或XML文档分类为特定类型的文档,即使它看起来像是(因为名字)。(更多内容在附录中) HTML4.01规范和ISO 8879(SGML)都没有说关于使用文档类型声明作为引擎模式转换的任何事情。doctype嗅探是基于观察,在doctype嗅探被设计时,绝大部分 的怪癖文档既没有文档类型声明也没有引用旧的DTD。HTML5接受这个事实,且定义了text/html中doctype作为唯一的模式转换。 典型的预HTML5(pre-HTML5)文档类型声明包含(被空白分开)“”。文档类型声明位于文档的根元素开始标签之前。 选择Doctypetext/html下面是创建新的text/html文档时如何选择doctype的简单指南:
这个doctype也会触发标准模式,但是由于对新功能不了解,这些传统的验证不是很精确,为避免你的组织需要进行对验证目标的守旧的策略。你还是应该把使用修改为你们组织的设计策略。
另外,如果你使用表格显示切片图像,你最好使用标准模式。
它会触发近乎标准模式。请注意,如果以后移植到HTML5上,基于利用表格实现的切片图像的布局可能会被破坏(完整标准模式也如此)。所以最好现在就确认你的设计是兼容标准模式的吧。
没有doctype。 请别这样做。故意为怪癖模式所做的设计将会困扰你、你的同事以及你未来的继任者。 如果你仍然想支持IE6,对IE6使用条件注释做一个特别的hack比应用怪癖模式更好。 我不推荐任何的XHTML doctype,因为XHTML被用作text/html被认为是有害的。如果你选择使用XHTML doctype,那么请注意XML声明会使IE6触发怪癖模式(IE7不会)。 application/xhtml+xml 对application/xhtml+xml的简单指南是绝不使用doctype。该方式下的网页不是“严格一致”的XHTML1.0,但这并不重要。(请看后面的附录) IE8/9/10相关的问题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标准模式。IE9有7种模式:IE5.5怪癖模式、IE7标准模式、IE8 近乎标准模式、IE8标准模式、IE9
近乎标准模式、IE9标准模式和IE9 XML模式。IE10有11种模式:IE5.5怪癖模式、IE7标准模式、IE8
近乎标准模式、IE8标准模式、IE9 近乎标准模式、IE9标准模式、IE9
XML模式、IE10怪癖模式、IE10近乎标准模式、IE10标准模式以及IE10 XML模式。模
式的选择取决于来自几个方面的数据:doctype、meta元素、HTTP头、来自微软的定期下载数据、局域网域、用户所做设置、局域网管理员所做设
置、父框架的模式(如果有)和地址栏兼容视图按钮被用户触发。(对于嵌入该引擎的其他应用,模式也取决于嵌入的应用。) 幸运的是如果出现下列情况,IE8/9大体上会像其他浏览器一样使用doctype嗅探,而IE10则会严格地使用doctype进行嗅探:
上述除两个关于X-UA-Compatible的情况外,IE8/9像IE7一样执行doctype嗅探。IE7 emulation就是兼容视图。 在 X-UA-Compatible 情况下,IE8/9的行为和其他浏览器完全不同。想看本页的附录或PDF和PNG格式的流程图。 (与其它浏览器图表的对比:PDF格式) 还有一个从IE5.5到IE9的统一的图 (包括了 Chrome Frame):PDF格式. (我打算做一个只包含IE9的这么一张图) 不幸的是,没有 X-UA-Compatible的HTTP头或meta标签,即使使用了合适的doctype,IE8/9让用户无意间使页面从标准模式降到IE7模式, 这是一种仿真的IE7标准模式。更糟糕的是,局域网管理员也可以这么做。微软也可以把你所用的所有域名到列入黑名单(比如mit.edu)。 为了对付这些影响,doctype是不够的,你需要X-UA-Compatible HTTP头和meta标签。 如果一个新的页面已经使用doctype触发了其它浏览器的标准模式,或者近乎标准模式。那么下面的内容将指导你如何利用X-UA-Compatible HTTP头或meta标签:
你不需要添加X-UA-Compatible HTTP头或meta标签。
你可以将此meta标签添加在你的网页里所有脚本之前(在HTML5中该标签是不合法的):<meta http-equiv="X-UA-Compatible" content="IE=Edge">;或者为你的页面设置此HTTP头:X-UA-Compatible: IE=Edge。
首先你可以将此meta标签添加在你的网页里所有脚本之前(在HTML5中该标签是不合法的):<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">;或者为你的页面设置此HTTP头:X-UA-Compatible: IE=EmulateIE7。 然后将你的网站修复为不依赖任何非IE7标准的内容,并迁移到IE=Edge。
首先你可以将此meta标签添加在你的网页里所有脚本之前(在HTML5中该标签是不合法的):<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">;或者为你的页面设置此HTTP头:X-UA-Compatible: IE=EmulateIE8。 然后将你的网站修复为不依赖任何非IE8标准的内容,并迁移到IE=Edge。
首先你可以将此meta标签添加在你的网页里所有脚本之前(在HTML5中该标签是不合法的):<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">;或者为你的页面设置此HTTP头:X-UA-Compatible: IE=EmulateIE9。 然后将你的网站修复为不依赖任何非IE9标准的内容,并迁移到IE=Edge。 Google Chrome Frame相关的问题
|