如何用JavaScript清除浏览器缓存?
我们部署了最新的JavaScript代码,但是我们无法获得最新的JavaScript代码。
编者按:这个问题在以下几个地方有半重复,下面第一个问题的答案可能是最好的。这个公认的答案不再是理想的解决方案。
如何强制浏览器重新加载缓存的CSS/JS文件?
如何强制客户端刷新JavaScript文件?
动态重载本地Javascript源/ json数据
如何用JavaScript清除浏览器缓存?
我们部署了最新的JavaScript代码,但是我们无法获得最新的JavaScript代码。
编者按:这个问题在以下几个地方有半重复,下面第一个问题的答案可能是最好的。这个公认的答案不再是理想的解决方案。
如何强制浏览器重新加载缓存的CSS/JS文件?
如何强制客户端刷新JavaScript文件?
动态重载本地Javascript源/ json数据
当前回答
更新:请参见location.reload()没有参数作为这个非标准参数的背景,以及Firefox如何可能是唯一支持的现代浏览器。
您可以调用window.location.reload(true)来重新加载当前页面。它将忽略任何缓存项,并从服务器检索页面、css、图像、JavaScript等的新副本。这不会清除整个缓存,但会清除您所在页面的缓存。
但是,最好的策略是对路径或文件名进行版本控制,就像在其他各种答案中提到的那样。此外,请参阅旋转文件名:由于不使用?v=n作为版本控制方案的原因,不要使用querystring。
其他回答
你不能用javascript清除缓存。 一种常见的方法是将修订号或最近一次更新的时间戳附加到文件中,如下所示:
myscript.123.js
or
myscript.js吗?更新= 1234567890
或者你可以通过服务器用file_get_contts读取js文件,然后在js内容的头中放入echo
尝试更改JavaScript文件的src?从这个:
<script language="JavaScript" src="js/myscript.js"></script>
:
<script language="JavaScript" src="js/myscript.js?n=1"></script>
这个方法应该强制浏览器加载JS文件的新副本。
大多数正确答案在这个话题中已经提到了。然而,我想添加一篇文章的链接,这是我能读到的最好的一篇文章。
https://www.fastly.com/blog/clearing-cache-browser
在我看来,最合适的解决方案是:
POST在一个iframe中。下面是建议帖子的一个小删减:
=============
const ifr = document.createElement('iframe');
ifr.name = ifr.id = 'ifr_'+Date.now();
document.body.appendChild(ifr);
const form = document.createElement('form');
form.method = "POST";
form.target = ifr.name;
form.action = ‘/thing/stuck/in/cache’;
document.body.appendChild(form);
form.submit();
有一些明显的副作用:这将创建一个浏览器历史记录条目,并受到响应未缓存的相同问题的影响。但它逃脱了fetch存在的预飞行要求,并且由于它是一个导航,分割缓存的浏览器将清除正确的缓存。
这个几乎能搞定。Firefox将为跨源资源保留卡住的对象,但仅用于后续获取。每个浏览器都将使对象的导航缓存无效,无论是同一源资源还是跨源资源。
==============================
我们尝试了很多方法,但是这个很有效。唯一的问题是,你需要能够以某种方式将这个脚本带到最终用户页面,这样你就能够重置缓存。在这种特殊情况下,我们是幸运的。
我倾向于对框架进行版本化,然后将版本号应用于脚本和样式路径
<cfset fw.version = '001' />
<script src="/scripts/#fw.version#/foo.js"/>