避免微信的静态缓存+通过js获取和修改地址栏参数

由于微信缓存,我们公司项目需要在地址栏中加入相应的版本号(原因参考,微信缓存),又因为我们是mvvm模式,半个api开发形式。所以需要用js进行处理

原理:

第一步:后端配置文件中设置版本号

第二步:后端将版本号传至前台,前台js用cookie中的版本号与后台传来的版本号做对比

第三步:对比版本号 ,不同的话进行刷新cookie中的版本号,t变量用来记录当前最新的版本号

var now_wap_version = getCookie('wap_version'); // cookie中的版本号
    var t =now_wap_version;
    if(result.wap_version){ // result.wap_version 后台返回的版本号
        if(result.wap_version!=now_wap_version){
            t = result.wap_version;
            addCookie('wap_version',result.wap_version,1);
        }
    }
第四步:进行下一步处理  相关核心的处理函数:

/**
 * 判断当前地址栏版本号 并做出相应的处理
 * @param  {[type]} t    地址栏参数key
 * @param  {[type]} val  最新的版本号
 * @param  {[type]} type 控制是地址返回值返回形式 还是直接跳转
 * @return 
 */
function replace_url(t,val,type){
    var ready_url = location.href.split('#')[0];
    var result_url = '';
    if(getQueryString(t)==val){
        return ready_url;
    }
    result_url = changeURLPar(ready_url,t,val);

    if(type){ // type 传过来值 则不进行跳转 而是将处理好的链接进行返回
        return result_url;
    }
    window.location.href = result_url;
}

/**
 * 修改地址栏参数的方法
 * @param  {[type]} destiny   目标地址的字符串 
 * 如 var now_url = http://www.121mai.com/wap/tmpl/app/app_home.html?dd=222&wap_version=121121
 * 
 * @param  {[type]} par       参数的key  如wap_version
 * @param  {[type]} par_value 参数要修改成为的值  如 121
 * @return {[type]}           新参数的地址字符串
 * 如changeURLPar(now_url, 'wap_version', '121');
 * =>http://www.121mai.com/wap/tmpl/app/app_home.html?dd=222&wap_version=121
 */
function changeURLPar(destiny, par, par_value) 
{ 
    var pattern = par+'=([^&]*)'; 
    var replaceText = par+'='+par_value; 
    if (destiny.match(pattern)) { 
        var tmp = '/\\'+par+'=[^&]*/'; 
        tmp = destiny.replace(eval(tmp), replaceText); 
        return (tmp); 
    } else{ 
        if (destiny.match('[\?]')) 
        { 
            return destiny+'&'+ replaceText; 
        } else { 
            return destiny+'?'+replaceText; 
        } 
    } 
    return destiny+'\n'+par+'\n'+par_value; 
} 


附1:js获取地址栏参数

function getQueryString(e) {
    var t = new RegExp("(^|&)" + e + "=([^&]*)(&|$)");
    var a = window.location.search.substr(1).match(t);
    if (a != null) return a[2];
    return ""
}


附2:js获取cookie的函数,js添加cookie的函数,js删除cookie的函数


function addCookie(e, t, a) {
    var n = e + "=" + escape(t) + "; path=/";
    if (a > 0) {
        var r = new Date;
        r.setTime(r.getTime() + a * 3600 * 1e3);
        n = n + ";expires=" + r.toGMTString()
    }
    document.cookie = n
}
function getCookie(e) {
    var t = document.cookie;
    var a = t.split("; ");
    for (var n = 0; n < a.length; n++) {
        var r = a[n].split("=");
        if (r[0] == e) return unescape(r[1])
    }
    return null
}
function delCookie(e) {
    var t = new Date;
    t.setTime(t.getTime() - 1);
    var a = getCookie(e);
    if (a != null) document.cookie = e + "=" + a + "; path=/;expires=" + t.toGMTString()
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值