微信公众号调取jssdk扫一扫功能,ios第一次进入页面调取失败(需刷新页面才能调取成功,Android正常)的解决方法

2,061 阅读1分钟

注意:ios第一次进入页面调取失败的原因主要在于传入的path路径

看了一些博客,说是url要用encodeURIComponent进行编码,后台解码就可以解决问题,但是对我用了还是不能解决,于是我又找了其它方法

用路由守卫解决了问题,说白了就是每次切换页面的时候都去重新config

但是因为安卓手机上没有问题,我就区分了安卓和ios的写法:

let u = navigator.userAgent, app = navigator.appVersion;
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if (isIOS) {
  // 全局路由守卫
  router.beforeEach((to, from, next) => {
    const data = {
      url: encodeURIComponent((location.href.split('#')[0])),
      appType: sessionStorage.getItem('appType')
    }
    const url = '/wx/getJsSdkPermission?' + qs.stringify(data);  //获取签名
    http.get({ url, data }, {
      success: (data) => {
        wx.config({
          beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: this,appId, // 必填,企业号的唯一标识,此处填写企业号corpid
          timestamp: data.timestamp, // 必填,生成签名的时间戳
          nonceStr: data.noncestr, // 必填,生成签名的随机串
          signature: data.sign, // 必填,签名,见附录1
          jsApiList: [
            "checkJsApi",
            "scanQRCode",
          ]// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
        wx.ready(function (data) {
        })
      }
    });
    next() // 必须使用 next ,执行效果依赖 next 方法的调用参数
  })

}

问题完美解决