需求很簡單,咱們的一個小程序須要實現 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 保存圖片、網絡音頻下載播放都須要加個延時。
我的讀書公衆號,歡迎交流!
安全