最近这个公众号分享的问题可把我折磨死了,先是分享出去的带code,由于我们是做的授权登录获取用户信息,所以别人点进去会显示分享人的信息,然后微信又不让改分享链接了,只能一顿操作在获取到用户信息之后把code截掉再刷一次页面,这样就能避免显示分享人的信息,但是想显示被分享人的信息还需要重新进行微信授权登录,所以分享出去的链接必须带上appId,想了很多办法,本来是在beforeEach里改,但是行不通,还会报错,想来想去只能改vueRouter自带的跳转方法了,也就是replace和push。代码如下:
let appId = '12345'
let originReplace = VueRouter.prototype.replace;
let originPush = VueRouter.prototype.push;
function makeNewLocation(location) {
//由于原来的前端书写不规范导致location可能是string
if (typeof location == 'string') {
var newLocation = {
path: location.split('?')[0],
query: {
appId: appId
}
}
//如果原来有带了参数也要加上
if (location.indexOf('?') != -1) {
var arr = location.split('?')[1].split('&')
for (var i = 0; i < arr.length; i++) {
newLocation.query[arr[i].split('=')[0]] = arr[i].split('=')[1]
}
}
location = newLocation
}
//原来有query就直接拼上
if (location.query) {
if (!location.query.appId) {
location.query = {
...location.query,
appId: appId
}
}
} else {
//原来没有query就定义一个
location.query = {
appId: appId
}
}
return location
}
VueRouter.prototype.replace = function (location, resolve, reject) {
location = makeNewLocation(location)
if (resolve && reject) {
originReplace.call(this, location, resolve, reject);
} else {
originReplace.call(
this,
location,
() => {},
() => {}
);
}
}
VueRouter.prototype.push = function (location, resolve, reject) {
location = makeNewLocation(location)
if (resolve && reject) {
originPush.call(this, location, resolve, reject);
} else {
originPush.call(
this,
location,
() => {},
() => {}
);
}
};