安卓微信浏览器location.reload()革新无效

场景:

页面上有一个按钮,点击的时刻实行window.location.reload(),一般状况reload()后会向背景发出要求,但在安卓的微信浏览器中reload后,经由过程fiddler抓包发明,并没有发送要求。应该是微信缓存的题目。

处理要领:

最经常使用的要领,更新时候戳:window.location.href+随机数。写了一个小函数,增加或更新链接后的时候戳。这里,第二个参数示意时候戳的key,不传参时,默许变量名为“t”。

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'); //传入自定义的变量名

亲测,有用。如果有更好的写法,迎接改正。

另解

还想过一个要领,这里是针对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抓包测试,只要第一次革新时有用,再次革新,安卓微信浏览器仍然会缓存。 所以,照样变动时候戳最有用,这也是处理缓存最经常使用的要领。

    原文作者:wslicknet
    原文地址: https://segmentfault.com/a/1190000006753455
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞