jeremygo

jeremygo

我是把下一颗珍珠串在绳子上的人

微信小程序 webview 實踐

最近做了不少小程序 webview 相關的需求,這裡做一個總結記錄

內嵌 H5 與原生小程序對比#

web-view 標籤要求基礎庫 1.6.4+

內嵌 H5微信小程序
離線能力
頁面切換體驗
首屏渲染速度
操作響應
開發靈活性
原生 API 支持

一般需要從開發靈活性和原生 API 能力支持上考慮技術選型,對應的是不同的交互設計。

此外使用內嵌 H5 還有以下優點:

  • 自建帳號體系可以與小程序 openid / UnionID 做關聯綁定,實現免登
  • 內嵌 H5 富文本,減少重複開發
  • 內嵌 H5 更新方便,減少發布審核

webview 配置及初始化#

域名配置#
  • 需要在小程序後台配置對應 H5 的業務域名(包括 H5 中內嵌的 iframe 域名)
  • 服務器需要將校驗文件放在配置業務域名的根目錄下
初始化#
  • web-view 要求小程序基礎庫 1.6.4+
  • H5 中引入 微信 JS-SDK
    • 判斷當前環境為小程序 webview,則異步加載 SDK 文件,初始化 wx.config
    • 實現 API 調用隊列,緩存 SDK 異步加載過程中的調用,當 SDK 初始化完畢後再統一執行

webview 通信#

postMessage#

小程序基礎庫 1.7.1+

H5 中調用 wx.miniProgram.postMessage 通知小程序,在用戶 點擊小程序後退、組件銷毀、分享 這些特殊事件後,通過 web-view 標籤的 bindmessage 回調事件監聽數據(多次 postMessage 的數據會是一個數組)

設置 web-view 標籤的 url#
  • 通過設置 web-view 標籤的 src 屬性將參數通過鏈接傳遞給 H5,比如通過小程序 webview 打開的 H5 走小程序登錄後會將 token 從鏈接傳遞避免 H5 內二次登錄
  • 更新 url 後會重新加載一次 H5 頁面
WebSocket#

除了官方推薦的上述兩種方式外還可以通過 WebSocket,需要 webview 組件內與 H5 連接同一個 socket,這種方式是繞過了小程序自身的限制,完全通過服務器進行通信,所以靈活性更高,相應地開發維護成本也更高

webview 調試#

  • 通過小程序開發者工具設置自定義的啟動頁面與啟動參數,進行預覽或真機調試,線上環境需要走體驗版驗證
  • H5 中引入 vConsole 插件調試

注意#

  • web-view 固定撐滿全屏
  • 小程序 webview 後跟的 H5 鏈接需要進行 encodeURIComponent 轉義,組件內再通過 decodeURIComponent 解析
  • H5 內調用小程序跳轉路徑必須 / 開發,且在 app.json 中定義
  • 內嵌 H5 跳轉小程序後原頁面還有緩存,可通過 url 後加時間戳解決

參考#

微信小程序內嵌 webview 相關知識點整理

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。