如何用JavaScript清除浏览器缓存?
我们部署了最新的JavaScript代码,但是我们无法获得最新的JavaScript代码。
编者按:这个问题在以下几个地方有半重复,下面第一个问题的答案可能是最好的。这个公认的答案不再是理想的解决方案。
如何强制浏览器重新加载缓存的CSS/JS文件?
如何强制客户端刷新JavaScript文件?
动态重载本地Javascript源/ json数据
如何用JavaScript清除浏览器缓存?
我们部署了最新的JavaScript代码,但是我们无法获得最新的JavaScript代码。
编者按:这个问题在以下几个地方有半重复,下面第一个问题的答案可能是最好的。这个公认的答案不再是理想的解决方案。
如何强制浏览器重新加载缓存的CSS/JS文件?
如何强制客户端刷新JavaScript文件?
动态重载本地Javascript源/ json数据
当前回答
请不要提供错误的信息。 缓存api是一种不同于http缓存类型的缓存
当服务器发送正确的头文件时,HTTP缓存被触发,你不能用javasvipt访问。
另一方面,缓存api在你想要的时候被触发,它在与service worker一起工作时很有用,所以你可以从这种类型的缓存中交叉请求和回答它 参见:插图1插图2课程
你可以使用这些技巧让你的用户总是有新鲜的内容:
Use location.reload(true) this does not work for me, so I wouldn't recomend it. Use Cache api in order to save into the cache and intersect the request with service worker, be carefull with this one because if the server has sent the cache headers for the files you want to refresh, the browser will answer from the HTTP cache first, and if it does not find it, then it will go to the network, so you could end up with and old file Change the url from you stactics files, my recomendation is you should name it with the change of your files content, I use md5 and then convert it to string and url friendly, and the md5 will change with the content of the file, there you can freely send HTTP cache headers long enough
我建议你看第三部
其他回答
请不要提供错误的信息。 缓存api是一种不同于http缓存类型的缓存
当服务器发送正确的头文件时,HTTP缓存被触发,你不能用javasvipt访问。
另一方面,缓存api在你想要的时候被触发,它在与service worker一起工作时很有用,所以你可以从这种类型的缓存中交叉请求和回答它 参见:插图1插图2课程
你可以使用这些技巧让你的用户总是有新鲜的内容:
Use location.reload(true) this does not work for me, so I wouldn't recomend it. Use Cache api in order to save into the cache and intersect the request with service worker, be carefull with this one because if the server has sent the cache headers for the files you want to refresh, the browser will answer from the HTTP cache first, and if it does not find it, then it will go to the network, so you could end up with and old file Change the url from you stactics files, my recomendation is you should name it with the change of your files content, I use md5 and then convert it to string and url friendly, and the md5 will change with the content of the file, there you can freely send HTTP cache headers long enough
我建议你看第三部
在PHP中,你也可以强制每小时重新加载一次代码,就像这样:
<?php
echo '<script language="JavaScript" src="js/myscript.js?token='.date('YmdH').'">';
?>
or
<script type="text/javascript" src="js/myscript.js?v=<?php echo date('YmdHis'); ?>"></script>
你也可以用元HTML标签禁用浏览器缓存,只要把HTML标签放在头部部分,以避免网页被缓存,而你正在编码/测试,当你完成时,你可以删除元标签。
(在标题部分)
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0"/>
在头部粘贴后刷新页面,应该也会刷新新的javascript代码。
如果你需要的话,这个链接会给你其他选择 http://cristian.sulea.net/blog/disable-browser-caching-with-meta-html-tags/
或者你可以像这样创建一个按钮
<button type="button" onclick="location.reload(true)">Refresh</button>
它会刷新并避免缓存,但它会在你的页面上,直到你完成测试,然后你可以把它拿掉。第一个选择是最好的选择。
我已经通过使用解决了这个问题 ETag
Etag类似于指纹,如果给定URL上的资源发生变化,则必须生成一个新的Etag值。比较它们可以确定资源的两个表示是否相同。
由于浏览器缓存相同的链接,您应该在url末尾添加一个随机数。 new Date(). gettime()生成一个不同的数字。
只需添加新的Date().getTime()链接结束 调用
'https://stackoverflow.com/questions.php?' + new Date().getTime()
输出:https://stackoverflow.com/questions.php?1571737901173