我遇到了这个问题,我似乎无法找到...的解决方案。
我有一个页面可以在初始加载时使用本机IE7(而不是来自IE9 / IE8的模拟文件)呈现,但是在从浏览器缓存提供的后续请求中回退到IE6标准模式。 IE7知道如何处理多个CSS类,如“div.class1.class2”,而IE6标准模式则没有 - 因此我的页面在每次访问时都会中断,但第一次访问。
以下是如何重现它:
所以似乎当所有文件都从亚马逊服务器获得服务时,IE7就可以很好地呈现它们,包括包含多个类的CSS规则。 (例如“div.class1.class2”)当你尝试使用完全相同的代码重新加载完全相同的页面时,它会以某种方式切换到IE6标准模式(非Quirks模式),它不能理解链接的CSS类并打破几个设计,例如按钮。 我尝试添加几个不同的Doctype / Meta标题,但它们没有任何区别,目前页面是XHTML Strict有效并且具有X-UA兼容的IE = edge标头,但是从缓存加载时仍然无法正确呈现。 我可以解决的标题中唯一的区别是Not Modified请求缺少Content-Type标头,但这应该不是问题,对吧?
哦,最重要的是,当我在本地开发服务器上使用IE7打开这个完全相同的页面时,即使重新加载,它也可以正常呈现! :/
更新
好吧,所以我终于能够在开发服务器上重现它了。唯一不同的是“max-age”标头,导致浏览器不在本地缓存任何内容。当我增加缓存时间时,IE7也开始缓存这些文件,一旦从缓存加载,它们再次导致设计中断。 因此,从缓存而不是服务器提供文件一定是个问题。
更新2
我把它缩小到CSS文件。看来,当IE7从缓存(即没有Content-Type标头)和IE7模式(从服务器加载)时,它使用IE6模式呈现它。 (内容类型:text / css) 有谁知道为什么会这样?也许有些格式错误的CSS规则? 作为一种解决方法,我现在在样式表中添加一个随机参数以防止缓存,从而阻止IE7切换到IE6模式,但即使从样式表中删除所有错误和警告后,问题仍然存在。
答案 0 :(得分:5)
不久前,我在支持传统的IE6应用程序时遇到了完全相反的行为。
无论如何,你使用xhtml 1.0严格的doctype,这是一个重要的开始!
首先:通常的清单:
现在准备好这些数据,并访问我见过的absolute best source on browsermode-switching,实际上每个自我尊重的网络开发书都应该在第一章中介绍。所有这些善良都在一个清晰的页面上,至少可以说是“启发” 人们应该知道浏览器模式切换有两个部分,并了解何时会发生什么样的行为 在同一页面上,您还可以找到一个IE mode-switching-flowchart,可以深入了解IE所遵循的EXTENSIVE迷宫,以确定它的最终渲染/浏览器模式。
真的希望这有帮助!
<强>更新强>
没有IE6(标准/ quirk)模式(在较新版本的IE中)。请参阅official microsoft documentation(以及updated link此报价!)我甚至引用它:
Windows Internet Explorer 7提供了旨在实现的新功能 更全面支持行业标准,如支持 通用选择器。因为该指令仅支持两个 设置(怪癖模式和标准模式),IE7标准模式被替换 Internet Explorer 6标准模式。
这是他们的doctype-switch检查器的代码(同一页面上的源代码):
engine = null;
if (window.navigator.appName == "Microsoft Internet Explorer")
{
// This is an IE browser. What mode is the engine in?
if (document.documentMode) // IE8 or later
engine = document.documentMode;
else // IE 5-7
{
engine = 5; // Assume quirks mode unless proven otherwise
if (document.compatMode)
{
if (document.compatMode == "CSS1Compat")
engine = 7; // standards mode
}
// There is no test for IE6 standards mode because that mode
// was replaced by IE7 standards mode; there is no emulation.
}
// the engine variable now contains the document compatibility mode.
}
现在阅读以上微软代码中的评论!!!!
关于您的第二次更新:
关于缓存的好发现!所以css现在是个问题。既然你现在开始理解为什么遗留的IE6应用程序需要IE6(IE6难以杀死的原因),也许你应该看看conditional comments。从那以后:
在其中,您可以包含指向IE特定css的链接(保持文档小巧,精简和整洁)......