最近做了不少小程序 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,则异步加载 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
后加时间戳解决