大型混合应用中的 WebView 容器设计
从 JSBridge、权限、生命周期和异常恢复出发,梳理金融移动端容器的关键边界。
3 分钟阅读
在大型混合应用中,WebView 并不是一个简单的网页窗口。它更像一层运行时:连接登录状态、设备能力、页面路由、安全策略和业务生命周期。
容器应该负责什么
容器适合承担跨页面、跨业务的基础能力:
- 登录态和统一身份认证。
- 相机、定位、扫码和生物识别。
- 页面路由、返回策略和缓存。
- 网络、权限与版本信息。
- 统一错误页和异常恢复。
具体业务规则应尽量留在业务侧。容器边界越稳定,H5 团队的发布节奏就越独立。
设计可演进的 Bridge
Bridge 接口需要像公开 API 一样被设计。参数、返回值、错误码和版本兼容都应该明确。
struct BridgeResponse<T: Encodable>: Encodable {
let code: String
let message: String
let data: T?
}不要让成功和失败返回完全不同的数据形状。稳定的响应结构能减少跨端判断,也更容易记录调用链路。
处理版本兼容
H5 的发布速度通常快于客户端。新增能力时应支持能力探测,而不是只比较 App 版本字符串。
const supported = await bridge.canIUse("location.openSettings");能力探测让灰度发布和旧版本兼容更自然。
生命周期比接口更容易出错
很多线上问题并不是 Bridge 方法本身错误,而是调用发生在错误的时间:页面已经销毁、授权弹窗仍在展示,或者容器刚从后台恢复。
需要特别关注:
- 页面进入和离开的事件是否成对。
- 异步回调是否仍对应当前页面。
- 多个 WebView 是否共享了错误状态。
- 登录失效后是否可以恢复原路径。
为异常路径设计体验
金融移动场景经常处于弱网、权限受限或设备能力不一致的环境。容器不能只提供错误码,还要提供用户可理解的恢复动作。
一个成熟的容器,价值不在于封装了多少原生方法,而在于它能让复杂业务在不理想的环境中依然可预测。