由于微信缓存,我们公司项目需要在地址栏中加入相应的版本号(原因参考,微信缓存),又因为我们是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()
}