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

2023-11-06

心态崩了,调了一天的企业微信 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调用

写在最后

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


(完)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • CDH 1、CDH简介

    1 Apache Hadoop 不足之处 版本管理混乱 部署过程繁琐 升级过程复杂 兼容性差 安全性低 2 Hadoop 发行版 Apache Hadoop Cloudera s Distribution Including Apache

随机推荐

  • 将单个字节数据读取到一个float类型的数据中---的几种方法

    从串口读取传感器值的时候总是一个一个字节 高八位低八位 需要拼接成一个float或者int的时候 这些方法有用处 1 联合体方式 union float f unsigned char x 4 data data x 0 0xA2 data
  • Eslint如何不忽略node_modules里检测(vue+webpack项目)

    背景 我们项目里的业务组件是以单独的仓库子模块的形式 通过安装包的形式install到主项目里node modules里的 主项目是开启了eslint检测的 但是发现对node modules里的内容是不起作用的 但因为公司的质量检测组要扫
  • Chrome利器之FireShot:网页长截图工具

    首先对于很多写博客写文章的笔友来说 难免少不了一些网页截图或者gif图之类的 现在这里讲的是一个便捷的谷歌浏览器长截图插件 FireShot FireShot功能特点 可以截取整个页面 可见部分和选定区域 并且支持拖动加载截图 非常方便 下
  • python logging 不输出控制台_解决Python logging模块无法正常输出日志的问题

    废话少说 先上代码 File logger conf formatters keys default formatter default format asctime s name s levelname s message s class
  • 解读JDK11新特性

    本文主要介绍JDK11的部分新特性和新的API 1 Local Var 在Lambda表达式中 可以使用var关键字来标识变量 变量类型由编译器自行推断 public class LocalVar public static void ma
  • c, c++函数名编译符号修饰符说明

    C 编译器的函数名修饰规则 函数名字修饰 Decorated Name 方式 函数的名字修饰 Decorated Name 就是编译器在编译期间创建的一个字符串 用来指明函数的定义或原型 LINK程序或其它工具有时须要指定函数的名字修饰来定
  • 计算两个多边形的交集

    一 问题描述 已知两个多边形Polygon1和Polygon2 分别由点集C1 P1 P2 Pm 和C2 Q1 Q2 Qn 表示 求这两个多边形的交集 二 算法思想 两个多边形相交后 其顶点要么是两个多边形边的交点 要么是在多边形内部的点
  • curl get请求_非常值得一看的 Curl 用法指南

    导读 curl 是常用的命令行工具 用来请求 Web 服务器 它的名字就是客户端 client 的 URL 工具的意思 它的功能非常强大 命令行参数多达几十种 如果熟练的话 完全可以取代 Postman 这一类的图形界面工具 本文介绍它的主
  • 计算机程序员怎样得到工作,计算机程序员的年终工作总结

    计算机程序员的年终工作总结 总结是对取得的成绩 存在的问题及得到的经验和教训等方面情况进行评价与描述的一种书面材料 通过它可以正确认识以往学习和工作中的优缺点 让我们来为自己写一份总结吧 但是却发现不知道该写些什么 下面是小编为大家整理的计
  • Python类,定义类,self

    一切皆对象 面向对象的三大要素 封装 同一功能的放一起 继承 多态 多种形态 类 class Classname 调用 class Classname 函数的写法 标识 函数名字 def funName 有冒号就要缩进一个Tab 或四个空格
  • [windows bat]如何启动一个新的cmd窗口并在其内执行命令

    两种方式 1 start cmd k echo Hello World 2 start cmd C pause 区别是第二种执行完毕以后 新开的窗口会自动关闭 第一种则不会 参考 http stackoverflow com questio
  • SQLsever练习题

    数据库练习 数据库数据 部门表create table dept deptno int primary key auto increment comment 部门编号 dname varchar 14 部门名字 loc varchar 13
  • python是一种面向过程的编程语言_python是面向对象还是面向过程的

    详细内容 Python虽然是解释型语言 但从设计之初就已经是一门面向对象的语言 对于Python来说一切皆为对象 正因为如此 在Python中创建一个类和对象是很容易的 当然如果习惯面向过程或者函数的写法也是可以的 Python并不做硬性的
  • 制作属于自己的安全工具包

    现在很多安全团队都有自己的武器 界面简洁 管理方便 可视化的界面双击即可打开需要的工具 可以在分组中筛选也可以在搜索框搜索 方便快捷 但是有个问题是别人的工具不一定适用于自己 而且资源不一定实时更新 可能耗费时间下载几个G的文件 发现里面的
  • 顾客到达规律:泊松分布

    到达k个顾客的概率是 单位时间内到达顾客的平均数是 没有顾客到达的规率是 指数分布 即上式中泊松分布的k 0 服务时间 指数分布 单位时间内被服务的顾客数是 求稳态状况下的概率分布 排队系统的顾客队列长度 系统中顾客数的期望值 顾客等待时间
  • 基于Python的考场考试分配规划系统Python爬虫安装数据分析与可视化计算机毕业设计

    更多项目资源 最下方联系我们 目录 一 项目技术介绍 二 项目配套文档 部分内容 资料获取 一 项目技术介绍 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功以及课程答疑与微信售后交流群 送查重系统不限次数
  • 中国的“贝尔实验室”:我们的数据库从内核的第一行代码写起

    说起做数据库 没人会觉得这是一件能够随便成功的事情 1985 此前忙于推广 Ingres 商业化的 Michael Stonebraker 重返学术界 想要解决当时数据库存在的问题 到了 1988 年 Michael 所在的项目组才实现并运
  • js几种打印方法的几种方法

    方法一 使用printJs库实现打印功能 1 引入插件 首先 在您的 HTML 文件中引入printJs库 可以通过在标签中添加以下代码来引入库文件 这将从 CDN 加载printJs库的 JavaScript 文件和 CSS 文件 2 创
  • jupyter notebook 在新安装的环境 安装包后 导入失败: 加载模块失败 ModuleNotFoundError: No module named

    新装的环境chatgpt 命令行conda activate chatgpt 进入后 pip安装各类包包 装好后在命令行和pycharm 正确设置interpreter后 都能正常导入 但使用notebook 导入不成功 以tiktoken
  • 【已解决】企业微信 JS-SDK 安卓设备正常,但无法在 IOS设备上使用

    心态崩了 调了一天的企业微信 sdk 不得不吐槽微信的api 文档做的实在太差了 内容残缺不全就不说了 还到处都是坑 现象描述 由于最近在基于企业微信开发H5应用 需要引入企业微信提供的JS SDK 功能实现自定义分享 也就是调用SDK 的