IE7无法加载我的样式表

4
我有一个在Firefox和Chrome上都可以使用的页面,但是在IE7上却出现了一个非常有趣的问题,样式表无法加载。然而,如果我按下CTRL F5,它就会加载。
这至少非常令人恼火。有没有人遇到过这个问题?有什么建议吗?
FYI:该页面使用JQuery和纯javascript,在整个页面中使用CSS元素进行绝对和相对位置的定位,并使用条件HTML(分离IE特定的javascript,因为IE7无法很好地响应一些jQuery效果与IE阴影滤镜相结合时,同时也加载了一个IE特定的样式表,解决了一些与定位相关的规范违规问题)。
4个回答

2

IE只是缓存了CSS文件,因为它的名称没有改变,所以不会检查是否有新的CSS文件。如果想强制加载新的CSS文件,你需要更改文件名。通常人们会使用版本号来解决这个问题。

mySheet.001.css
mySheet.002.css
...etc.

这样,当您更改版本号时,它将在所有用户的第一次重新加载 - 只需确保同时更改引用。


如果我没有清除缓存、强制获取并恢复IE出厂设置需要重新启动IE,那么这将是正确的。不过我会再次确认。 - xmars
1
哦,我的天啊,你说得对。IE 真的是一个可怕的可怕的产品。人们会期望在清除所有东西(cookies、历史记录、临时文件、缓存、数据等)之后,然后将缓存设置为始终获取,然后点击“恢复出厂设置”,该死的东西实际上会按照它应该做的去做。但显然不是这样的。 - xmars
4
一个不需要重命名文件就能避免缓存问题的好方法是在文件名结尾加上"?v=xxxx"。IE浏览器会识别到参数不同,从而不会使用缓存。 - Surreal Dreams

2

一个防止缓存的好方法是在CSS文件上使用查询字符串。

尝试:

<link rel="stylesheet" type="text/css" href="style.css?v=00001" />

如果你在更改时对数字进行排序,它会自动重新下载CSS文件,而无需重命名。你也可以对图像和其他文件执行此操作。
编辑:如果你的网站经常更改,使用日期作为字符串比版本号更有用。这只是使其更易于人类阅读。
例如:
<link rel="stylesheet" type="text/css" href="style.css?v=130906-1" />

1

你尝试过更改IE缓存设置吗?


是的。这不是Maurizio的问题,我已经清除了所有内容并将缓存设置更改为始终获取。样式表中可能有问题,但它在所有浏览器中(包括偶尔的IE)都能正常工作吗? IE无法正确加载页面,但如果我按CTRL F5,它就可以了。 - xmars

0

@naspinski: 不行。xmars写了他清除了缓存。问题并不考虑更新后看到更改。不要建议使用CSS名称漏洞。缓存是有用的,它可以在网站未更新时提供更高的效率,人们应该能够从这个解决方案中受益。此外,Etag是应该用来触发客户端更新的适当机制,而不是一些松散的变通方法。

@xmars: IE7没有关于在条件注释中链接级联样式表的已知、报告、重现和记录的错误。你要么是一个强大的错误查找者,要么就是错了。在这里链接你的文档。让我们来看看它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接