如何使用JavaScript清除浏览器缓存?
我们已经部署了最新的JavaScript代码,但是我们无法获取到最新的JavaScript代码。
编辑注:这个问题有一定的重复,以下链接中第一个问题的回答可能是最佳解决方案。本回答已不再是最佳解决方案。
如何使用JavaScript清除浏览器缓存?
我们已经部署了最新的JavaScript代码,但是我们无法获取到最新的JavaScript代码。
编辑注:这个问题有一定的重复,以下链接中第一个问题的回答可能是最佳解决方案。本回答已不再是最佳解决方案。
更新:有关此非标准参数的背景以及Firefox如何成为唯一支持该参数的现代浏览器,请参见location.reload()没有参数。
您可以调用window.location.reload(true)来重新加载当前页面。它将忽略任何缓存项目并从服务器检索页面、CSS、图像、JavaScript等的新副本。这不会清除整个缓存,但会清除您所在页面的缓存。
然而,您最好的策略是按照其他答案中提到的版本化路径或文件名。此外,请参见Revving Filenames: 不要使用查询字符串,了解不使用?v=n
作为您的版本控制方案的原因。
你无法使用javascript清除缓存。
一种常见的方法是将修订号或最后更新时间戳附加到文件末尾,像这样:
myscript.123.js
或者
myscript.js?updated=1234567890
尝试更改JavaScript文件的src属性?从这里开始:
<script language="JavaScript" src="js/myscript.js"></script>
变成:
<script language="JavaScript" src="js/myscript.js?n=1"></script>
这个方法应该会强制你的浏览器加载一个新的JS文件副本。
除了每小时或每周缓存一次,您可以根据文件数据进行缓存。
例如(在PHP中):
<script src="js/my_script.js?v=<?=md5_file('js/my_script.js')?>"></script>
甚至可以使用文件的修改时间:
<script src="js/my_script.js?v=<?=filemtime('js/my_script.js')?>"></script>
您也可以在PHP中像这样每小时强制重新加载代码:
<?php
echo '<script language="JavaScript" src="js/myscript.js?token='.date('YmdH').'">';
?>
或者<script type="text/javascript" src="js/myscript.js?v=<?php echo date('YmdHis'); ?>"></script>
window.location.reload(true)
在HTML5标准中已被弃用。一种不使用查询字符串的解决方法是使用Clear-Site-Data
头部,该头部正在标准化中。
var scripts = document.getElementsByTagName('script');
var torefreshs = ['myscript.js', 'myscript2.js'] ; // list of js to be refresh
var key = 1; // change this key every time you want force a refresh
for(var i=0;i<scripts.length;i++){
for(var j=0;j<torefreshs.length;j++){
if(scripts[i].src && (scripts[i].src.indexOf(torefreshs[j]) > -1)){
new_src = scripts[i].src.replace(torefreshs[j],torefreshs[j] + 'k=' + key );
scripts[i].src = new_src; // change src in order to refresh js
}
}
}
for(var j=0;j<torefreshs.length;j++){
。 - Souvik Ray尝试使用这个
<script language="JavaScript" src="js/myscript.js"></script>
<script language="JavaScript" src="js/myscript.js?n=1"></script>
if ( IS_DEV ) {
$this->view->cacheBust = microtime(true);
} else {
$this->view->cacheBust = file_exists($versionFile)
// The version file exists, encode it
? urlencode( file_get_contents($versionFile) )
// Use today's year and week number to still have caching and busting
: date("YW");
}
从视图中:
<script type="text/javascript" src="/javascript/somefile.js?v=<?= $this->cacheBust; ?>"></script>
<link rel="stylesheet" type="text/css" href="/css/layout.css?v=<?= $this->cacheBust; ?>">