【发布时间】:2012-07-24 04:35:41
【问题描述】:
我有这个问题,我似乎无法找到解决方案...
我有一个页面在初始加载时使用本机 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 标头,但从缓存加载时仍然无法正确呈现。 我能弄清的标头的唯一区别是 Not Modified 请求缺少 Content-Type 标头,但这应该不是问题,对吧?
哦,最重要的是,当我在本地开发服务器上使用 IE7 打开这个完全相同的页面时,它呈现得很好,即使在重新加载之后! :/
更新
好的,所以我终于能够在开发服务器上重现它了。唯一不同的是“max-age”标头,导致浏览器不在本地缓存任何内容。当我增加缓存时间时,IE7 开始缓存这些文件,一旦它们从缓存中加载,这再次导致设计中断。 所以这一定是文件从缓存而不是服务器提供的问题。
更新 2
我将范围缩小到 CSS 文件。看起来,IE7 要么在它来自缓存(即没有 Content-Type 标头)时以 IE6 模式呈现它,要么在它从服务器加载时以 IE7 模式呈现它。 (内容类型:文本/css) 有谁知道为什么会这样?也许是一些格式错误的 CSS 规则? 作为一种解决方法,我现在向样式表添加一个随机参数以防止缓存,这会阻止 IE7 切换到 IE6 模式,但即使从样式表中删除所有错误和警告后,问题仍然存在。
【问题讨论】:
-
根据我的经验,与 chrome 和 FF 相比,IE 很难支持。你声明了什么
DOCTYPE? -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">是的,我对整个浏览器兼容性问题并不陌生,但我在这个特殊的问题上碰壁了。 :// -
您的更新2:您是否验证了样式表的错误?你那里有任何 CSS hack 吗?您是否使用过 IE 特定的
filter样式(因为它有一些非标准语法)?你能通过删除文件的部分或全部内容来解决问题吗? -
是的,CSS 是有效的,我不确定是不是 CSS 的某个部分触发了问题……毕竟 CSS 有 2000 多行,所以很难调试。 ://
标签: html css caching internet-explorer-7 internet-explorer-6