【已解决】企业微信 JS-SDK 安卓设备正常,但无法在 IOS设备上使用

48 篇文章 1 订阅
22 篇文章 7 订阅

心态崩了,调了一天的企业微信 sdk 。

不得不吐槽微信的api 文档做的实在太差了,内容残缺不全就不说了,还到处都是坑!!!

现象描述

由于最近在基于企业微信开发H5应用,需要引入企业微信提供的JS-SDK 功能实现自定义分享,也就是调用SDK 的分享接口,由于之前做过微信公众号的h5应用,也使用过微信公众号的SDK。大致看了一下企业微信SDK 的文档和公众号大体一致,于是便按照文档要求进行开发,一开始都挺好,遇到点小问题看看文档和社区基本上都能解决。很快便将企业微信的SDK 集成到应用中,并且用安卓设备调试通过了,本以为问题就这样圆满解决,哪曾想换了个IOS 设备上来就报错,通过 vConsole 打印出来一看,出来这么一个错误: Uncaught ReferenceError: jWeixin is not defined

额,我服了 jWeixin 难道不是通过微信提供的CDN链接全局注入的吗?怎么会不存在!!!况且安卓设备都没问题,一定是设备和IOS版本的问题,接连换了几个IOS 设备依然是同样的问题。WOC情况不妙 看来和操作系统有关。

这里贴一下企业微信的SDK链接

官方只说需要引入 http://res.wx.qq.com/open/js/jweixin-1.2.0.js 即可,不过根据社区评论,大家都说需要将下面两个JS都引入。

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script>

问题调试

既然说jWeixin不存在,那跟踪一下jWeixin不就好了。于是我在所有使用 jWeixn 的地方都埋了日志,发现一个奇怪现象,在分享接口初始化和调用之前 jWeixn 对象都是存在的,说明 jWeixn 确实是 一个全局对象 ,但当在分享接口初始化和调用的时候 访问 jWeixin 却变成了 not defined , 一会儿有一会儿无,极有可能是如下两种情况:

  1. 异步加载的时序问题;(由于使用企业微信SDK 需要通过后台生成签名,所以存在异步请求)
  2. 函数作用域问题。

为了验证是不是异步加载的时序问题,我作了一个长达数秒的延时然后再进行SDK初始化和调用,发现问题依旧,看来和异步时序无关。但是按照我的理解 jWeixn 应该是SDK 注入的一个全局对象,也不应该是作用域的问题。

可能的方案

眼看自己分析找不出问题原因,不得不求助社区和网友。发现广大网友提供的最多的方案是将 http://res.wx.qq.com/open/js/jweixin-1.2.0.js替换成https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js

即引入的js 文件变成了下面这样:

注意和上面的对比

<script src="https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>

其中这篇文章整理的资料最为齐全: 企业微信 JS SDK 自建应用踩坑指南,最重要的是字里行间都能看出和我一样的抱怨。

不过遗憾的是上面的这些方法并没有什么 Luan 用。问题还是原来的那个问题。只不过是再一次证明了微信的api 文档不靠谱!!!

不怎么靠谱的解决办法

回到问题本身,之前提到过在通过 CDN 引入js 文件后,是可以直接访问到jWeixin 对象的那么我有一个大胆的想法,自己写一个全局变量缓存 jWeixn 变量是否可行呢?

经过实践这样的确可行,但是为什么可行,却并不理解。

  • 几个关键步骤
  1. 引入sdk
    <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script src="https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script>
    
  2. 自定义全局变量缓存jWeixn 对象
  3. 在初始化和调用分享接口的地方使用自定义的全部变量代替jWeixn 对象
  4. 按照企业微信的文档实现相关的api调用

写在最后

虽然问题得以解决,却没有找到根本原因,或许只是误打误撞解决了,说不定未来会作为隐患爆发。如果大家有知道具体原因或者更好方法的,欢迎大家留言讨论。


(完)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingyong.g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值