背景
Hybrid 应用开发是介于 Web 应用和系统应用之间的技术,兼具系统应用的良好交互体验和 Web 应用的跨平台开发优势。
其核心原理是由 Native 通过 JSBridge 通道提供统一的 API,使用 Html/CSS 实现界面,JS 编写业务逻辑,能够调用系统 API,最终页面在 WebView 中显示。
本文探讨 ArkWeb 开发的几个核心话题:
- Hybrid 应用鸿蒙化方案(架构设计、JSBridge、API 鸿蒙化、组件鸿蒙化)
- 同层渲染 Web(原理、实现、生命周期)
- 基于 Web 的视频适配
- 网页跨域解决方案
- Web 组件拦截能力
本文主要介绍 Hybrid 应用鸿蒙化方案、双端通信(JSBridge)和 API 鸿蒙化。后续将介绍组件鸿蒙化(同层渲染)、视频适配、跨域解决方案和 Web 组件拦截能力。
Hybrid 应用鸿蒙化方案
整体架构
Hybrid 应用鸿蒙化方案的整体架构包含三个核心部分:
Ark 进程:
- 由 ArkTS 引擎提供运行时,具备调用系统 API 的能力
- 应用启动从 Ark 进程进入,完成 EntryAbility 的初始化并创建 HarmonyOS 应用页面
- Ark 进程可以动态或者静态创建 Webview 运行时环境,并加载 html/css/js 资源文件
Webview 进程:
- 默认支持标准 W3C API,对 ArkTS 侧资源的访问有限制
- Webview 渲染能力主要由 Web 组件提供
- 用户可以通过 Web 组件的属性配置是否开启同层渲染能力、是否允许执行 JavaScript 脚本等
JSBridge:
- 上述两种进程的通讯机制,允许数据双向流动
- Webview 进程通过 JSBridge 通道访问拓展 API
方案设计
Hybrid 应用鸿蒙化方案主要集中在三个方面:
- 双端通信 JSBridge 实现:前端与 ArkTS 进行双向通信的桥梁
- 拓展接口实现:针对 JS 侧平台相关的 API,提供一套 HarmonyOS 版本的实现
- 基于同层渲染的原生组件实现:使用系统提供的同层渲染能力,把部分性能要求比较高的前端组件改成 ArkTS 实现
业务实现中的关键点
Hybrid 应用鸿蒙化方案主要围绕双端通信、API 鸿蒙化、组件鸿蒙化三方面进行开发:
- 双端通信:JS 侧使用 ArkTS 的通道,是鸿蒙化的基石
- API 鸿蒙化:针对 JS 侧平台相关的 API,提供一套 HarmonyOS 版本的实现
- 组件鸿蒙化:针对 Web 组件,以同层渲染的方式提供替代组件,以提升组件的性能与交互体验
双端通信(JSBridge)
JSBridge 扮演 Webview 进程与 ArkUI 主进程沟通的桥梁,是一种双向通信的机制。
HarmonyOS 系统提供 Web 组件以及@ohos.web.webview 等 ArkWeb API 来进行 Web 开发。可以通过 WebMessagePort 以及 javaScriptProxy 代理的方式实现 JSBridge。
WebMessagePort
WebMessagePort 是一种比较基础的消息发送以及接收机制,支持的消息类型为 string 和 ArrayBuffer。
具体业务消息内容的封装和解析需要从零设计,存在上手难、工作量大的特点。
JavaScriptProxy 代理
JavaScriptProxy 代理机制注入 ArkUI 主进程对象(如命名为 native)到 Webview 中,在 Webview 的 window 上生成对应代理对象,业务可以直接调用该代理对象的方法,相关的操作将作用到 ArkUI 主进程的 native 对象。

