1、了解文件兼容性的必要性每个主要版本 IE 新增的功能都是为了让浏览器更容易使用、增加安全性及更支持业界标准。以这些作为 IE 的特色,其中一个风险就是旧版本网站无法正确的显示。为了将这个风险降到最低,IE6 允许网页开发人员选择 IE 编译和显示他们网页的方式。“Quirks mode“为预设,这会使页面以旧版本浏览器的视点显示,“Standards mode“(也称为“strict mode“)特点是支持业界标准最为完善。然而要利用这个增强的支持功能,网页必须包含恰当的指令。若一个网页没有包含指令,IE6 会将它以 quirks mode 显示。若网页包含有效的指令但浏览器无法辨识,IE6
2、会将它以 IE6 standards mode 显示。因为少数网站已经包含指令,兼容性模式的切换相当成功。这使网页开发人员能选择将他们的网页转移为 standards mode 的最佳时机。随著时间经过,更多网站开始使用 standards mode。它们也开始使用 IE6 的特性和功能来检测 IE。举例来说,IE6 不支持 universal selector(即 css 之全局选择器 * ),一些网站便使用它来针对 IE 做特定的对应。当 IE7 增加了对全域选择器的支持,那些依赖 IE6 特点的网站便无法侦测出这个新版本的浏览器。因此那些针对 IE 的特定对应无法应用于 IE7,造成这些
3、网站便无法如他们预期的显示。由于只支持两种兼容性模式,受到影响的网站拥有者被迫更新他们的网站使其能支持 IE7。IE8 比之前的任何版本浏览器都更支持业界标准,因此针对旧版本浏览器设计的网页可能无法如预期般呈现。为了帮助减轻所有问题,IE8 引入文件兼容性的概念,使 你能选择你的网页设计要对应的特定 IE 版本。文件兼容性在 IE8增加了一些新的模式,这些模式能告诉浏览器如何解析和编译一个网页。若你的网页无法在 ie8 正确的显示,你可以更新你的网站使它支持最新的网页标准(优先选项)或在你的页面上新增一个 meta 元素用于告诉 IE8 如何依照旧版本浏览器编译你的页面。这能让你选择将你的网站
4、更新支持 IE8 新特点的时机。认识文件兼容性模式IE8 支持几种文件兼容性模式,它们具有不同的特性并影响内容显示的方式。?Emulate IE8 mode 指示 IE 使用指令来决定如何编译内容。Standards mode 指令会显示成 IE8 Standards mode 而 quirks mode 会显示成IE5 mode。不同于 IE8 mode,Emulate IE8 mode 重视指令。 ?Emulate IE7 mode 指示 IE 使用指令来决定如何编译内容。Standards mode 指令会显示成 IE7 Standards mode 而 quirks mode 会显示成
5、IE5 mode。不同于 IE7 mode,Emulate IE7 mode 重视指令。对于许多网页来说这是最推荐的兼容性模式。 ?IE5 mode 编译内容如同 IE7 的 quirks mode 之显示状况,和 IE5 中显示的非常类似。 ?IE7 mode 编译内容如同 IE7 的 standards mode 之显示状况,无论网页是否含有指令。 ?IE8 mode 提供对业界标准的最高支持,包含 W3C Cascading Style Sheets Level 2.1 Specification 和 W3C Selectors API,并有限的支持 W3C Cascading Styl
6、e Sheets Level 3 Specification (Working Draft)。 ?Edge mode 指示 IE 以目前可用的最高模式显示内容。当使用 IE8 时其等同于IE8 mode。若(假定)未来放出支持更高兼容性模式的 IE,使用 Edge mode 的页面会使用该版本能支持的最高模式来显示内容。同样的那些页面在使用 IE8 浏览时仍会照常显示。由于 edge mode 使用该 IE 版本所能支持的最高模式来显示所浏览的网页内容,建议仅使用于测试页及其他非商用页面。指定文件兼容性模式要为你的网页指定文件模式,需要在你的网页中使用 meta 元素放入 X-UA-Compa
7、tible http-equiv 标头。以下是指定为 Emulate IE7 mode 兼容性之范例。My Web PageContent goes here.其内容随著指定的页面模式而更改,当要模拟 IE7 时,指定 IE=EmulateIE7,指定 IE=5, IE=7, 或 IE=8 来选择其中一种兼容性模式。你也可以指定 IE=edge来指示 IE8 使用它支持的最高模式。X-UA-compatible 标头没有大小写之分。然而除了 title 元素及其他的 meta 元素之外,它必须出现在网页 header 节其它元素之前的位置,设定网站服务器以指定预设兼容性模式网站管理员可籍着为网
8、站定义一个自订标头来为他们的网站预设一个特定的文件兼容性模式。这个特定的方法取决于你的网站服务器。举例来说,下列的 web.config 文件使 Microsoft Internet Information Services (IIS)能定义一个自订标头以自动使用 IE7 mode 来编译所有网页。若你已于网站服务器指定了一个预设的文件兼容性模式,你可以在个别页面上指定不同的文件兼容性模式来盖过它。在网页中指定的模式优先权高于服务器中所指定的模式。请查阅你的网站服务器关于指定自订标头的资讯,或看更多资料:Implementing the META Switch on ApacheImpleme
9、nting the META Switch on IIS判定文件兼容性模式要判定网页使用 IE8 浏览时的文件兼容性模式,使用 document object(文档对象)的 documentMode 功能。例如在 IE8 的网址列输入下列程式码会显示目前页面的文件模式。javascript:alert(document.documentMode);documentMode 功能会回传一个数值对应目前页面的文件兼容性模式,举例来说,若网页指定为支持 IE8 模式,documentMode 便会回传值“8“。在 IE6 引入的 compatMode 功能不支持在 IE8 引入的 documentM
10、ode 功能。目前使用 compatMode 建立的应用程式还能在 IE8 中作用,但它们必须更新为使用documentMode。若你希望使用 JavaScript 判定一个文件的兼容性模式,引入下面范例的这段程式码可支持旧版本的 IE。engine = null;if (window.navigator.appName = “Microsoft Internet Explorer“)/ This is an IE browser. What mode is the engine in?if (document.documentMode) / IE8engine = document.docu
11、mentMode;else / IE 5-7engine = 5; / Assume quirks mode unless proven otherwiseif (patMode)if (patMode = “CSS1Compat“)engine = 7; / standards mode/ the engine variable now contains the document compatibility mode.认识内容属性值内容属性值在接收到异于先前叙述的数值时是具有弹性的。这能使你对于 IE 如何显示你的网页更有操控性。举例来说,你可以设定内容属性值为 IE=7.5。当你这样做的时
12、候,IE 尝试将这个值转换为 version vector 并选择最接近的结果。在这个例子中,IE 会将其设定为 IE7 mode。下面的范例显示该模式设定为其他值的状况。to determine how to display the Web page 注意: 前面的范例显示单独的内容值。实际上 IE 只会执行网页中第一个 X-UA-Compatible 标头。你也可以使用内容属性来指定复数的文件兼容性模式,这能帮助确保你的网页在未来的浏览器版本都能一致的显示。欲设定复数的文件模式,请设定内容属性以判别你想使用的模式。使用分号来分开各个模式。如果一个特定版本的 IE 支持所要求的兼容性模式多于一种,将採用列于标头内容属性中最高的可用模式。你可以使用这个特性来排除特定的兼容性模式,虽然并不推荐这样做。举例来说,下列标头即会排除 IE7 mode。结论兼容性对于网页设计师来说是非常重要的顾虑。虽然最好是可以建立一个完全不需依赖任何网页浏览器特性或功能的网站,有时候这是不可能实现的。文件兼容性模式便能将网页限制在某个特定版本的 IE 中。使用 X-UA-Compatible 标头来指定你的页面支持的 IE 版本。使用document.documentMode 判定页面的兼容性模式。选择支持某个特定版本的 IE,你可以确保你的页面在未来的浏览器版本中也能有显示的一致