安卓微信瀏覽器location.reload()刷新無效

場景:

頁面上有一個按鈕,點擊的時候執行window.location.reload(),正常狀況reload()後會向後臺發出請求,但在安卓的微信瀏覽器中reload後,經過fiddler抓包發現,並無發送請求。應該是微信緩存的問題。php

解決方法:

最經常使用的方法,更新時間戳: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等於以下:curl

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抓包測試,只有第一次刷新時有效,再次刷新,安卓微信瀏覽器仍然會緩存。 因此,仍是更改時間戳最有效,這也是解決緩存最經常使用的方法。測試

相關文章
相關標籤/搜索