解决微信安卓版浏览器缓存问题
2017-03-14 本文已影响40人
iHelin
问题:浏览器js执行window.location.reload(),正常情况下reload()后页面依然会向后台发出请求,但在安卓版本的微信浏览器中reoad()后并没有真正的向后台发送请求。因为微信默认做为缓存来处理了。
解决方案
请求URL后添加随机数或时间戳
window.location.href=window.location.href+随机数(或时间戳)
方式代替reload()。代码如下
function updateUrl(url,key){
var key= (key || 't') +'='; //默认是"t"
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,'v');//传入自定义的变量名
更准确的,可以先判断浏览器是否是微信自带浏览器,然后再对应处理,代码如下
function isWeiXin(){
var ua = window.navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i) == 'micromessenger'){
return true;
}else{
return false;
}
}