调用 jssdk 在ios 上一直报invalid signature 的问题解决

问题描述

用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()
  }
});
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值