需求很简单,咱们的一个小程序须要实现 pdf
预览,通过调研,微信小程序的文档有个文档预览 api: wx.openDoucument
,另外,这个接口只能打开本地文件,因此要配合另一个接口 wx.downloadFile
, 把网络文件下载到本地。android
咱们很快就用微信的 api 实现了预览功能,android 机一切正常,iOS 遇到一个问题:常常打不开预览,极少数状况能打开。打印日志,wx.downloadFile
和 wx.openDoucument
接口调用都是成功的。web
通过查找,网上的小程序 pdf 预览方案基本都是:android 使用微信 api,iOS使用 web-view 来预览,web-view 须要一个在域名根路径放置一个校验文件,这个不算麻烦,不过咱们发布正式环境,碰到了安全提示问题:阿里的 oss 域名在微信里面会弹安全提示,解决方案:绑定本身的域名。canvas
周末,我对 iOS 不能用微信 api 预览的问题耿耿于怀, 再次查找资料,仍是无果,因而改回微信 api 预览方案,加入各类调试,居然发现问题没有重现,iOS 能够预览!小程序
我有点摸不着头脑,直觉告诉我,确定有哪里不同!因而我一段一段的代码来看,最终发现端倪:iOS 使用 web-view 预览时,咱们加入了一段判断代码:判断环境是 iOS 时,使用 web-view,是 Android 时,使用微信 api。这段判断代码是微信的获取系统信息接口,关键的点是:它是个异步接口!微信小程序
我大胆判断,异步是关键所在,因而改用 setTimeout,结果是 iOS 能正常预览,这段怪案到此也就结了。api
有明确线索了,再来查找资料,发现微信小程序还有其余相似问题:canvas 保存图片、网络音频下载播放都须要加个延时。
我的读书公众号,欢迎交流!安全