2

我在页面“X”(父)的 iframe 中有一个页面“Y”。

页面 X 有 http 标头:`X-UA-Compatible IE=EmulateIE7`
并且没有元标记
并具有文档类型:`DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"`
页面 Y 具有 http 标头:`X-UA-Compatible IE=EmulateIE7`
并且元标记为 `meta http-equiv="X-UA-Compatible" content="IE=8"`
并且有文档类型:`DOCTYPE html`

我看到在 IE7 浏览器中呈现的页面 Y 与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面(即浏览器模式:ie8,文档模式:IE7 标准模式)存在一些行为差异。

我尝试运行这个 js javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.'),它显示“标准模式”。

但是由于页面的呈现方式不同,我倾向于认为由于标题不一致而引入了一些古怪的模式。

我想知道行为差异是否正常,如果是,为什么?

PS:通过行为差异,我的意思是,当我将鼠标悬停在 jquery 网格中的一行上时,其中一个 td 中的图像消失了,而在 IE7 中工作正常。

4

1 回答 1

4

与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面相比,在 IE7 中呈现的页面是否会有任何差异?

直接回答:是的,会有的。两者之间存在已知差异,这就是为什么使用兼容模式进行 IE 版本测试被认为是一件坏事的原因。

问题是“兼容模式”实际上并未使用 IE7 渲染引擎。它使用 IE8 渲染引擎(或您使用的任何 IE 版本),但内部开关设置为更改行为以模仿 IE7。它的设计看起来很相似,但它不是同一个引擎,并且在所有情况下它的行为方式都不相同。

几年前,我被 IE8 的 IE7 模式中的一个错误深深地抓住了。它浪费了我们几天的开发时间来尝试调试它,直到我们弄清楚发生了什么。

唯一明智的解决方案是不惜一切代价避免兼容模式。将X-UA-Compatible标志设置为IE=edge; 强制所有版本的 IE 使用其最佳可用模式。

兼容模式适用于想要坚持使用现有代码的网站;谁想要升级他们的 IE 版本但没有时间修复他们的代码。不幸的是,comaptiblity 模式中的错误使得修复代码以使用升级的 IE 版本实际上更容易。

顺便说一句,您在标签中提到了“怪癖模式”问题。重要的是要了解您所看到的不是Quirks 模式。这可能是古怪的行为,但实际上并不是 Quirks 模式。Quirks 模式本身是一个完全不同的东西(它基本上是一种 IE5 兼容模式,你真的不想要那个)。它是由丢失或无效的 DOCTYPE 触发的,但您使用的是有效的 doctype,所以这很好。

于 2013-11-04T17:08:25.087 回答