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