如何在IE中击败浏览器缓存?

时间:2013-10-25 12:01:34

标签: javascript html browser-cache

在阅读了几个主题之后,我遇到了两个基本的解决方案。

一个涉及要求浏览器不要缓存 - > 使用HTML元标记S1:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
<meta http-equiv='expires' content="-1"/>
<meta http-equiv='pragma' content="no-cache"/>

它对我不起作用。

其他是在URL之后放置随机数

S2:

<script language="javascript" src="./js/myJS.js?'+ Math.Random()*100+'"/>

这些可以在Chrome和Mozilla上运行,但出于某种原因,它们在IE上不适用于我。

有人知道另一种方法吗?

我无法将S2嵌入脚本块中。如果可以,那么这可能会奏效。

<script> 
document.write("<script language=\"javascript\" src=\"./js/myJS.js?'+ Math.Random()*100+'\"/>") 
</script>

3 个答案:

答案 0 :(得分:1)

您的解决方案2是正确的方法,但您无法编写字符串“&lt; script /&gt;”在&lt; script&gt;内标记,因为它混淆了HTML解析器。有关详细信息,请参阅this question

您可以通过以下技巧解决此问题:

<script> 
<![CDATA[document.write("<script language=\"javascript\" src=\"./jsdir/RS_01_eng.js?'+ Math.Random()*100+'\"><\/script>")]]>
</script>

我还建议您删除language =“javascript”,因为HTML5中不再需要它。

也许你应该从 Math.Random()* 100 切换到 new Date()。getTime()以便有更独特的东西并阻止1在一百次边缘案件中。

答案 1 :(得分:1)

您是否尝试过转义脚本代码?

<script >
    document.write(unescape("%3Cscript src='./js/myJS.js?r=" + Math.random().toString().replace('.', '') + "' type='text/javascript'%3E%3C/script%3E"));
</script>

答案 2 :(得分:0)

你试过了吗?

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

答案取自:Using <meta> tags to turn off caching in all browsers?

编辑:我知道你已经尝试了一些元标记,但上面写的类似标记过去对我有用。