设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

通过Doctype启用浏览器模式

2014-8-7 11:17| 发布者: joejoe0332| 查看: 4437| 评论: 0|原作者: hizzgdev|来自: 开源中国社区

摘要:   为了即能解析那些满足Web标准的网页,又能解析那些过去20年来遗留下来的传统的网页,现代浏览器一般都实现了多种网页解析的模型。本文将介绍这些解析模型都是什么,以及它们是如何触发的。 内容概述   本 ...

  为了即能解析那些满足Web标准的网页,又能解析那些过去20年来遗留下来的传统的网页,现代浏览器一般都实现了多种网页解析的模型。本文将介绍这些解析模型都是什么,以及它们是如何触发的。


内容概述

  本文档的主要结论是,你应当在你HTML文档(所有以text/html类型处理的内容)的源代码顶部加上。(详见下文)


  如果你还想确保使用IE8/IE9/IE10的用户不做任何操作就可以让网页以IE7的形式显示,你可以在你的服务器上为所有text/html的响应添 加HTTP头"X-UA-Compatible: IE=Edge",还可以在HTML文档的head内的最上方加上。然而这将会导致HTML文档不能通过校验(HTML document invalid)。其实即使你不加上这些IE-specific声明,IE大部分情况下的默认行为也是合理的,因此,你也不需要对这些IE-specific过于依赖。(下文将会介绍例外的情况)


本文档的适用范围

  本文档几乎覆盖了所有的浏览器,包括以Firefox为代表的Gecko内核的浏览器、以Safari/Chrome为代表的Webkit内核的浏 览器、Opera、Konqueror、IE for Mac、IE for Windows/Windows Phone以及那些内嵌IE内核的其它浏览器。下面我们将不再使用这些浏览器引擎的名称,而是以各引擎的典型浏览器的名称来代替。


  本文档重点说明的不是这些模式的具体行为,而是它们的选择机制。希望能让你明白如何避免(不小心使用)那些过期的模式,而不是告诉你如何故意使用这些过期的模式实现最佳的行为。


模式介绍

  本文将介绍以下这些模式:


适用于text/html类型的常见模式

  对text/html类型的内容来说,模式的选择取决于对文档的doctype探测(参见下文的doctype探测章节)。在IE8及更高版本的浏览器 中,模式还取决于一些其它因素。在IE8及更高版本浏览器,对于不在微软提供的黑名单上的网站,模式取决于doctype。如果安装了Google Chrome Frame,将会受到另外一些因素的影响,甚至会影响到IE6和IE7。

  • 怪癖模式(Quirks Mode)

  在怪癖模式中,为了避免“破坏”那些根据上世纪90年代末流行的实践创作的页面,浏览器违反了现代的Web格式规范。不同的浏览器实现了不同的怪癖行为。 以前,不同的浏览器实现了不同的怪癖模式,比如IE6/7/8/9里的怪癖模式就是IE5.5模式,其它浏览器的怪癖模式则是对近乎标准模式的一种修改。 最近各浏览器已经开始在它们的怪癖模式里应用相同的行为,尤其要提到的是IE10的怪癖模式已不再模仿IE5.5,而是与其它浏览器的怪癖模式保持一致。 目前WHATWG正在制定怪癖模式的标准。

  和其它浏览器中的怪癖模式一样,IE10的怪癖模式有时会被称为"互操作性怪癖模式"(interoperable Quirks mode)以与IE10的模仿IE5.5的怪癖模式(Internet Explorer 5 Quirks)进行区别。

  如果你正在编写一个新的页面,请使用标准模式,而坚决不要使用怪癖模式。

  • 标准模式(Standards Mode)

标准模式中,这些浏览器将尝试以各自实现的程度规范正确地处理文档。

不同的浏览器遵循不同的阶段,所以标准模式也不是一个单一目标。

HTML标准中称这种模式为 “非怪癖模式”(no quirks mode)。

  • 近乎标准模式(Almost Standards Mode)

  Firefox, Safari, Chrome, Opera (从7.5开始), IE8, IE9 and IE10 还有一个称为近乎标准模式(the Almost Standards mode)的模式,这种模式以传统的方式设定表格的垂直高度,而没有遵从CSS2的标准。Mac IE 5、Windows IE 6/7、Opera prior to 7.5以及Konqueror并不需要该模式,因为这些浏览器的标准模式也没有按照CSS2的标准设定表格的垂直高度。事实上,相对于较新的浏览器的标准 模式,它们的标准模式更接近于近乎标准模式。回顾过去,  如果没有"标准模式"与"近乎标准模式"的区别,Web或许会更好,可以默认使用近乎标准模式的行为,再利用样式表特性选择标准模式下的行为。然而,你还是应该用标准模式,而不要用近乎标准模式。HTML标准中称这种模式为有限怪癖。


适用于application/xhtml+xml类型的模式(XML模式)

  在Firefox, Safari, Chrome, Opera 和 IE9 里,如果HTTP响应中的Content-type是application/xhtml+xml时会触发XML模式,需要强调的是触发条件是HTTP的 Content-type,不是HTML中的元素,也不是HTML的doctype。在XML模式下,这些浏览器将以各自 实现的程度规范正确地处理XML文档。

  IE6/7/8不支持application/xhtml+xml,Mac版的IE5也不支持。

  在基于Webkit的Nokia S60浏览器上,由于考虑到在围墙花园(译者按:walled garden,指的是一个控制用户对网页内容和服务进行访问的环境,围墙花园把用户限制在一个特定的范围内,它允许用户访问指定的内容,同时防止用户访问其他未被允许的内容。)环境下对病态内容的兼容性,application/xhtml+xml的HTTP Content-type并不触发XML模式。因为传统的移动浏览器并没有使用真正的XML解析器,那些病态内容也会被作为XML对待。

  我并没有测试 Symbian3上的默认浏览器。

  我没有对Konqueror进行过充分的测试,不好说这个浏览器的具体行为。


微软额外提供的一些IE-Specific模式

  下面列出了一些额外的IE-specific模式,这些模式并不适用于HTML5,也不适用于其它不支持这些模式的浏览器,它们通过配置来激活,还可以通过"X-UA-Compatibleas"的HTTP头,或者html里的meta元素进行激活。

  • Internet Explorer 5 Quirks

除了互操作性怪癖模式外,IE10还有一个称为Internet Explorer 5 Quirks的模式,它模仿了IE5.5的行为,这种模式在IE6/7/8/9中称为怪癖模式。

  • Internet Explorer 7 Standards

IE8/9/10使用该模式模拟IE7的标准模式。

  • Internet Explorer 8 Standards

IE9/10使用该模式模拟IE8的标准模式。

  • Internet Explorer 8 Almost Standards

IE9/10使用该模式模拟IE8的近乎标准模式行为。在界面上的开发者工具箱中,这个模式与IE8标准模式没什么区别。

  • Internet Explorer 9 Standards

IE9/10使用该模式模拟IE9的标准模式。

  • Internet Explorer 9 Almost Standards

IE10使用该模式模拟IE9的近乎标准模式行为。在界面上的开发者工具箱中,这个模式与IE9标准模式没什么区别。

  • Internet Explorer 9 XML

IE10使用该模式模拟IE9的XML模式行为。在界面上的开发者工具箱中,这个模式与IE9标准模式没什么区别。

  值得注意的是,对上一版本的IE的模拟并不够完美,我自己就遇到过一些例子:比如在IE7以上的版本中使用IE7的标准模式对@font-face(像 EOT字体)的处理是不同的;还有,在IE10的IE9模式下CSS的2D变换是不需要-ms-前缀的,但是真正的IE9却需要该前缀。如果你认同本文给 出的建议,请不要过于关注这些模式,这些兼容模式也将不会对你的产品带来不好的影响。然而对于快捷测试来说,相对于在虚拟机中使用老版本的IE进行测试, 还不如在一个较新的IE上使用不同的兼容模式进行测试。

  另外,IE10的Windows Phone版与Windows桌面版相同,都有上面所说的这些模式。 



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部