页面上有一个按钮,点击的时候执行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抓包测试,只有第一次刷新时有效,再次刷新,安卓微信浏览器仍然会缓存。 因此,仍是更改时间戳最有效,这也是解决缓存最经常使用的方法。测试