问题描述
用vue开发微信公众号项目过程中发现,由于微信授权重定向url上面带的/#/会导致重定向失败·,所以采用history模式。
在hash模式调用jssdk是ok的,但是在history模式除了初次进入页面调取jssdk成功,其他跳转页面都提示失败,一直报“invalid signature”,并且这个问题只发生在ios,然而在跳转后的页面进行刷新操作后,jssdk调用成功了。
原因:vue-router切换的时候都是操作的浏览器历史记录,真实URL为第一次刚进入时的URL。
每次路由变化时都重新请求下签名,发起签名请求的url参数必须是当前页面的url(注:不是最初进入页面时的)
微信IOS版:SPA的url是不会变的
微信Android版:SPA的url是会变的(Android手机跳转页面好像会自动刷新)
解决方法
在“main.js”页面写入如下代码:
router.beforeEach ((to, from, next) => {
var u = navigator.userAgent;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if (isiOS && to.path !== location.pathname) {
// 此处不可使用location.replace
location.assign(to.fullPath)
} else {
next()
}
});