资讯专栏INFORMATION COLUMN

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

Dr_Noooo / 2624人阅读

摘要:场景页面上有一个按钮,点击的时候执行,正常情况后会向后台发出请求,但在安卓的微信浏览器中后,通过抓包发现,并没有发送请求。假设原页面链接是,则等于如下在中,处理如下然而经抓包测试,只有第一次刷新时有效,再次刷新,安卓微信浏览器仍然会缓存。

场景:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80236.html

相关文章

  • 安卓微信览器location.reload()刷新无效

    摘要:场景页面上有一个按钮,点击的时候执行,正常情况后会向后台发出请求,但在安卓的微信浏览器中后,通过抓包发现,并没有发送请求。假设原页面链接是,则等于如下在中,处理如下然而经抓包测试,只有第一次刷新时有效,再次刷新,安卓微信浏览器仍然会缓存。 场景: 页面上有一个按钮,点击的时候执行window.location.reload(),正常情况reload()后会向后台发出请求,但在安卓的微信...

    jzman 评论0 收藏0
  • Ios中微信页面返回上一页去除缓存几种常见思路

    摘要:但在微信页面中也会保存上一页面最后执行的状态,不会重新执行。原因微信中调整到下一页面后并未将上一页面修改的保持在历史记录中,以代码为例,返回上一页并未返回到,而是返回到中。 前言 这篇文章主要讲解决思路,不对各种概念进行过多讲解。 问题描述 开发微信H5页面的时候,在Ios微信内置浏览器中点击返回按钮返回上一页时,上一页面不会被刷新。在浏览器缓存机制中,在返回上一页的操作中, html...

    ckllj 评论0 收藏0
  • 这些常用的H5代码你知道吗

    摘要:返回上一页第一次在手机端用到返回上一页的时候,只写了这一句。但是只在安卓手机有效果,兼容苹果手机需要在跳转代码后加上这句。方法阻止元素发生默认的行为。 1、返回上一页第一次在手机端用到返回上一页的时候,只写了window.history.go(-1);这一句。但是只在安卓手机有效果,兼容苹果手机需要在跳转代码后加上return false;这句。跳转后刷新页面加上self.locati...

    CNZPH 评论0 收藏0
  • 这些常用的H5代码你知道吗

    摘要:返回上一页第一次在手机端用到返回上一页的时候,只写了这一句。但是只在安卓手机有效果,兼容苹果手机需要在跳转代码后加上这句。方法阻止元素发生默认的行为。 1、返回上一页第一次在手机端用到返回上一页的时候,只写了window.history.go(-1);这一句。但是只在安卓手机有效果,兼容苹果手机需要在跳转代码后加上return false;这句。跳转后刷新页面加上self.locati...

    gggggggbong 评论0 收藏0

发表评论

0条评论

Dr_Noooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<