问题描述

用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()
  }
});
Logo

前往低代码交流专区

更多推荐