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

Posted

技术标签:

【中文标题】与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面相比,在 IE7 中呈现的页面是不是会有任何差异?【英文标题】:Will there be any differences in a page thats rendered in IE7 compared to the same page rendered in IE7 standards mode in IE8 browser?与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面相比,在 IE7 中呈现的页面是否会有任何差异? 【发布时间】:2013-11-15 06:59:53 【问题描述】:

我在页面“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 中工作正常。

【问题讨论】:

即使是一些 cmets 也有助于理解问题。任何提示任何人? 【参考方案1】:

在 IE7 中呈现的页面与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面有什么不同吗?

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

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

几年前,我被 IE8 的 IE7 模式中的一个错误严重发现。在我们弄清楚发生了什么之前,它浪费了我们几天的开发时间来尝试调试它。

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

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

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

【讨论】:

以上是关于与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面相比,在 IE7 中呈现的页面是不是会有任何差异?的主要内容,如果未能解决你的问题,请参考以下文章

添加http头以强制IE8在IE7模式下呈现

添加http头以强制IE8以IE7模式呈现(PHP版本)

PHP 添加http标头以强制IE8在IE7模式下呈现(PHP-Version)

IE10 以 IE7 模式呈现。如何强制标准模式?

JavaScript:如果它处于 IE7 或 IE8 兼容模式,我可以检测到 IE9 吗?

在 IE7 或 IE8 中使用表单元素获得统一的布局