JavavaJ世界微尘里,,,,前端攻城狮

解决微信安卓版浏览器缓存问题

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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读