最近在写vue项目的获取地址栏参数时跳了个小坑,记录学习一下。
用location.search:
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
但是像 http://localhost:8002/#/home/test?deviceid_s=864207059707329 这样的地址,取location.search时值为空。
原因: 因为查询字符串search只能取到“?”后面和“#”之前的内容,如果“#”之前没有“?”search取值为空。
改用location.href:
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.href.split('?')[1].match(reg); //匹配目标参数
if (r != null) return decodeURI(r[2]); //decodeURI参数内容。
return null; //返回参数值
}
后来自己写了个获取地址栏所有参数的方法,如下:
function getPamars() {
let info = decodeURIComponent(location.href.split('?')[1])
if (info === 'undefined') return null
info = info.split("&").join()
let list = info.split(",")
let json = {}
list.forEach(v => {
let key = v.split("=")[0],
value = v.split("=")[1]
json[key] = value
})
return json
}
这个方法目前还没有翻车,但难免有所缺漏。还请翻到此页的大佬们指教