我有这个问题,我似乎无法找到解决方案......
我有一个页面在初始加载时使用本机 IE7(不是来自 IE9/IE8 的模拟页面)呈现良好,但在从浏览器缓存提供的后续请求中回退到 IE6 标准模式。IE7 知道如何处理多个 CSS 类,如“div.class1.class2”,而 IE6 标准模式不知道 - 因此我的页面在每次访问时都会中断,但第一次访问。
以下是如何重现它:
- 打开IE7(真正的,IE9/IE8的IE7 Emulated Mode不行!)
- 去hhttp://beta.upcload.com/widget/popup?garmentId=workaholicfashion-5276777&sid=
- 在初次访问时,一切都应该看起来不错(例如蓝色按钮,就像在 Chrome 或 FF 中一样)
- 现在重新加载页面,几个 CSS 规则中断,因为浏览器回退到 IE6 标准模式(不是 Quirks 模式,我检查了一个!document.compatMode 仍然是“CSS1Compat”)
- 清除缓存并重新加载,一切又看起来不错
- 随心所欲地重复
因此,当所有文件都从 Amazon 服务器获得时,IE7 似乎可以很好地呈现它们,包括包含多个类的 CSS 规则。(例如“div.class1.class2”)当您尝试使用完全相同的代码重新加载完全相同的页面时,它会以某种方式切换到 IE6 标准模式(不是 Quirks 模式),它不理解链接的 CSS 类并破坏了几个设计,例如按钮。我尝试添加几个不同的 Doctype / Meta 标头,但它们都没有区别,目前该页面是 XHTML Strict 有效并且具有 X-UA-Compatible IE=edge 标头,但从缓存加载时仍然无法正确呈现。我能弄清的标头的唯一区别是未修改请求的缺少 Content-Type 标头,但这应该不是问题,对吧?
哦,最重要的是,当我在本地开发服务器上用 IE7 打开这个完全相同的页面时,它呈现得很好,即使在重新加载之后!:/
更新
好的,所以我终于能够在开发服务器上重现它了。唯一不同的是“max-age”标头,导致浏览器不在本地缓存任何内容。当我增加缓存时间时,IE7 开始缓存这些文件,一旦它们从缓存中加载,这再次导致设计中断。因此,从缓存而不是服务器提供文件一定是一个问题。
更新 2
我将其缩小到 CSS 文件。看起来,IE7 要么在它来自缓存(即没有 Content-Type 标头)时以 IE6 模式呈现它,要么在它从服务器加载时以 IE7 模式呈现它。(Content-Type: text/css) 有谁知道为什么会这样?也许是一些格式错误的 CSS 规则?作为一种解决方法,我现在向样式表添加一个随机参数以防止缓存,这会阻止 IE7 切换到 IE6 模式,但即使在从样式表中删除所有错误和警告之后,问题仍然存在。