h5在ios系统里调用微信jsdk失败

问题:h5项目在微信浏览器里,在ios系统下调用微信jssdk失效,报签名失败;在安卓系统里没有这种问题(打开jsdk debug: true,可快速定位问题)

原因:基于vue spa,在history模式下,ios缓存的是首次进入页面的url,当调用微信jsdk进行注册的时候,location.href虽然获取的是当前页面的url,但获取签名的时候其实还是缓存首次进入页面的url,所以会报错。

wx.config({
  debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: appid, // 必填,公众号的唯一标识
  timestamp: timestamp, // 必填,生成签名的时间戳
  nonceStr: noncestr, // 必填,生成签名的随机串
  signature: sign, // 必填,签名,见附录1
  jsApiList: [],
  openTagList: []
});

解决方法:

  • 一、首次进入页面的时候将当前url赋值给变量(推荐)
// 记录ios初始化url(可放在main.js入口文件获取,否则可能会有不可预测的问题)
if (
  isIOS() &&
  (typeof window.entryUrl === 'undefined' || window.entryUrl === '')
) {
  window.entryUrl = location.href.split('#')[0];
}
// 安卓路由更新的时候 都会更新,所以安卓就在路由里每次都赋值
router.afterEach(() => {
  // 记录安卓url 用于注册微信jsdk
  if (!isIOS()) window.entryUrl = location.href.split('#')[0];
});
  • 二、调用jsdk的页面进行刷新操作(页面刷新用户体验不好,不推荐)
  • 三、ios首次进入页面的时候就注册微信jsdk方法,后面在使用的时候区分ios还是安卓,是ios的情况下直接调用微信方法,不过安卓还是需要每次获取签名注册
  • 四、还有一种是通过判断url是否一致更新文档location.assign()方法(有可能回不到上个页面,没试过)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值