这个问题我在实际开发过程中遇到了很多困难,生产环境和开发环境往往不是我们想的那样,这里简单记录方便以后查看。
//获取查询字符串
export const getQueryString = function () {
let queryObj = {}
let qString = window.location.href.split('?')[1];
//undefined
if (!qString) {
return queryObj
}
qString = qString.indexOf('#') == -1 ? qString : qString.split('#')[0];
if (!qString) {
return queryObj
}
let qStringArr = qString.split('&');
for (let i = 0; i < qStringArr.length; i++) {
let key = qStringArr[i].split('=')[0];
let value = qStringArr[i].split('=')[1];
queryObj[key] = value;
}
return queryObj;
}
开始主要是缺少了对hash的考虑,在实际开发场景中地址可能是这样的
http://172.0.0.1:7005/visitorSeparateMultilingual/index.html?productPk=ff8080&loginCode=z1mfYd&companyPk=ff8080#/channel
hash跑到了查询字符串最后面(#/channel),所以此时应该把这种情况也考虑进去。代码如下
qString = qString.indexOf('#') == -1 ? qString : qString.split('#')[0];
这里我写得比较简单粗暴,直接进行了字符串和数组的操作(正则不太擅长)。