vue-router切换的时候操作的都是浏览器的历史记录,iOS会把第一次刚进入时的URL作为真实URL,安卓会把当前URL作为真实URL。
所以导致后端在配置好的授权参数获得的config参数和微信sdk获取的参数是不一样的。
微信的官方文档建议: SPA单页应用应该在每次切换页面的时候实例化sdk
但是由于遇到这个问题,我就将授权的部分放在了App.vue这个部分来完成,App.vue包含了。而且因为我并没有使用history模式, 也就是说vue的history模式下你并不能这么来。 在hash模式下,页面的路径格式是 https://www.xxx.com/#/xxx?xx=xx&...,这样的话,你初始化的路径就是https://www.xxx.com/,#后面的算是页内跳转不会影响jssdk的配置。当然啦,你如果用的histroy模式,那么页面路径不带#就会配判断为一直在变动,就需要你每个页面都去配置。
App.vue中增加
mounted(){
uni.setStorage({
key: 'WxCodeUrl',
data:location.href
});
},
再增加一个方法, 判断是否是 IOS,如果是就将第一次的 url 存起来
getSignUrl(){
var signLink = ''
var ua = navigator.userAgent.toLowerCase();
if (/iphone|ipad|ipod/.test(ua)) {
signLink =uni.getStorageSync('WxCodeUrl');
if(!signLink)signLink = location.href
} else {
signLink = location.href
}
return signLink;
},