场景
页面上有个按钮点击之后需要刷新当前页面,在使用了Location.reLoad()之后无效。
解决方法
更新时间戳:window.location.href+随机数
js如下:
function updateUrl(url,key){
var key= (key || 't') +'='; //默认key是"t",可以传入key自定义
var reg=new RegExp(key+'\\d+'); //正则:t=1472286066028
var timestamp=+new Date();
if(url.indexOf(key)>-1){ //有时间戳,直接更新
return url.replace(reg,key+timestamp);
}else{ //没有时间戳,加上时间戳
if(url.indexOf('\?')>-1){
var urlArr=url.split('\?');
if(urlArr[1]){
return urlArr[0]+'?'+key+timestamp+'&'+urlArr[1];
}else{
return urlArr[0]+'?'+key+timestamp;
}
}else{
if(url.indexOf('#')>-1){
return url.split('#')[0]+'?'+key+timestamp+location.hash;
}else{
return url+'?'+key+timestamp;
}
}
}
}
调用:
window.location.href=updateUrl(window.location.href); //不传参,默认是“t”
window.location.href=updateUrl(window.location.href,'ts'); //传入自定义的变量名
亲测有效
针对PHP的情况
还想过一个方法,这里是针对php的情况,就是将location.href指向一个新的链接,在新链接中再重定向本页面。
假设原页面链接是://xxx.xxx.com/xxx/index?fsid=1001039610100510,则location.href等于如下:
var url=location.href;
location.href='//xxx.xxx.com/xxx/update?curl='+encodeURIComponent(url);
在PHP中,function update()处理如下:
function again(){
$url=$this->input->get('curl');
header("Location: ".$url);
}
然而经fiddler抓包测试,只有第一次刷新时有效,再次刷新,安卓微信浏览器仍然会缓存。 所以,还是更改时间戳最有效,这也是解决缓存最常用的方法。
摘自:这里