一段怪案:IOS 微信小程序 pdf 预览问题

问题背景

需求很简单,我们的一个小程序需要实现 pdf 预览,经过调研,微信小程序的文档有个文档预览 api: wx.openDoucument,另外,这个接口只能打开本地文件,所以要配合另外一个接口 wx.downloadFile, 把网络文件下载到本地。

问题1: IOS 微信小程序经常打不开 pdf

我们很快就用微信的 api 实现了预览功能,android 机一切正常,iOS 遇到一个问题:经常打不开预览,极少数情况能打开。打印日志,wx.downloadFilewx.openDoucument 接口调用都是成功的。

问题2: 微信小程序 web-view 访问阿里 oss 弹安全提示

经过查找,网上的小程序 pdf 预览方案基本都是:android 使用微信 api,iOS使用 web-view 来预览,web-view 需要一个在域名根路径放置一个校验文件,这个不算麻烦,不过我们发布正式环境,碰到了安全提示问题:阿里的 oss 域名在微信里面会弹安全提示,解决方案:绑定自己的域名。

问题解决

周末,我对 iOS 不能用微信 api 预览的问题耿耿于怀, 再次查找资料,还是无果,于是改回微信 api 预览方案,加入各种调试,竟然发现问题没有重现,iOS 可以预览!

我有点摸不着头脑,直觉告诉我,肯定有哪里不一样!于是我一段一段的代码来看,最终发现端倪:iOS 使用 web-view 预览时,我们加入了一段判断代码:判断环境是 iOS 时,使用 web-view,是 Android 时,使用微信 api。这段判断代码是微信的获取系统信息接口,关键的点是:它是个异步接口!

我大胆判断,异步是关键所在,于是改用 setTimeout,结果是 iOS 能正常预览,这段怪案到此也就结了。

有明确线索了,再来查找资料,发现微信小程序还有其他类似问题:canvas 保存图片、网络音频下载播放都需要加个延时。

欢迎交流

个人读书公众号,欢迎交流!
读书三到-读书,学习技术

阅读 201

推荐阅读