赞
踩
介绍
本篇 Codelab 主要介绍 H5 如何调用原生侧相关功能,并在回调中获取执行结果。以“获取通讯录”为示例分步讲解 JSBridge 桥接的实现。
环境搭建
我们首先需要完成 HarmonyOS 开发环境搭建,可参照如下步骤进行。
软件要求
DevEco Studio版本:DevEco Studio 3.1 Release。
HarmonyOS SDK版本:API version 9。
硬件要求
设备类型:华为手机或运行在 DevEco Studio 上的华为手机设备模拟器。
HarmonyOS 系统:3.1.0 Developer Release。
环境搭建
安装 DevEco Studio,详情请参考下载和安装软件。
设置 DevEco Studio 开发环境,DevEco Studio 开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:如果可以直接访问 Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问 Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
开发者可以参考以下链接,完成设备调试的相关配置:
使用真机进行调试
使用模拟器进行调试
代码结构解读
本篇 Codelab 只对核心代码进行讲解,对于完整代码,我们会在源码下载或 gitee 中提供。
├──entry/src/main/ets // 代码区 │ ├──common // 公共代码区 │ │ ├──constants // 公共常量 │ │ │ ├──CodeConstant.ets // 异步脚本模板 │ │ │ └──CommonConstant.ets // 公共常量和样式常量 │ │ └──utils // 工具类 │ │ ├──JsBridge.ets // 桥接类 │ │ └──Logger.ets // 日志类 │ ├──entryability │ │ └──EntryAbility.ets // 程序入口 │ ├──pages │ │ └──SelectContact.ets // 主页面 │ └──viewmodel // 项目所需数据类型定义 │ ├──JavaScriptItem.ets // javaScriptProxy数据格式 │ └──ParamsItem.ets // 回调参数数据格式 └──entry/src/main/resources // 资源入口(rawfile文件夹中存放html) └──rawfile ├──js │ └──mainPage.js // H5调用函数文件 ├──css │ └──main.css // H5样式文件 └──MainPage.html // H5页面
ArkTS 侧与 H5 的交互
4.ArkTS 侧执行完毕。最后调用 runJavaScript 方法执行 callback,H5 侧接收异步回调数据。
4.1 初始化 JSBridge
在 initJSBridge 方法中,通过 webviewControll.runJavaScript()将 JSBridge 初始化脚本注入 H5 执行。其中 callID 用来标识 H5 回调;JSBridgeCallback 方法用来执行 H5 侧回调;window.ohosCallNative 对象给 H5 侧提供调用函数。
// CodeConstant.ets /** * 异步执行脚本 */ export const code = ` const JSBridgeMap = {}; let callID = 0; // 执行H5回调函数 function JSBridgeCallback (id, params) { JSBridgeMap[id](params); JSBridgeMap[id] = null; delete JSBridgeMap[id]; } // 在window中声明callNative方法供H5调用 window.ohosCallNative = { callNative(method, params, callback) { const id = callID++; const paramsObj = { callID: id, data: params || null } JSBridgeMap[id] = callback || (() => {}); JSBridgeHandle.call(method, JSON.stringify(paramsObj)); } } `;
4.2 javaScriptProxy 注入
通过 Web 组件的 javaScriptProxy 属性,将 JSBridgeHandle 对象注册到 H5 侧的 window 上,作为 H5 调用原生的通道。
// JsBridge.ets export default class JsBridge { /** * 注入JavaScript对象到window对象中 * * @returns javaScriptProxy object */ get javaScriptProxy(): JavaScriptItem { return { object: { call: this.call }, name: "JSBridgeHandle", methodList: ['call'], controller: this.controller } as JavaScriptItem; } } // SelectContact.ets @Entry @Component struct SelectContact { webController: WebView.WebviewController = new WebView.WebviewController(); private jsBridge: JSBridge = new JSBridge(this.webController); build() { Column() { Web({ src: $rawfile('MainPage.html'), controller: this.webController }) .javaScriptAccess(true) .javaScriptProxy(this.jsBridge.javaScriptProxy) ... } ... } }
4.3 call 方法及 callback 回调
call 方法作为 H5 调用原生侧接口的统一入口,在该方法中根据 H5 调用的方法名,匹配到对应的接口后调用,调用结束后通过 this.callback()方法,将调用结果回传到 H5。
// JsBridge.ets /** * 定义桥接类 */ export default class JsBridge { /** * 将ArkTS侧数据传递给call方法 */ call = (func: string, params: string): void => { const paramsObject: ParamsItem = JSON.parse(params); switch (func) { case 'chooseContact': result = this.chooseContact(); break; default: break; } result.then((data: string) => { this.callback(paramsObject?.callID, data); }) } /** * 将ArkTS侧数据传递到H5 */ callback = (id: number, data: string): void => { this.controller.runJavaScript(`JSBridgeCallback("${id}", ${JSON.stringify(data)})`); } }
4.4 H5 调用 ArkTS
实现了上述桥接逻辑后,在 H5 侧只需要调用 ohosCallNative 方法,将函数名以及回调函数传递到 ArkTS。
// mainPage.js
function chooseContact() {
window.ohosCallNative.callNative('chooseContact', {}, (data) => {
...
});
}
总结
您已经完成了本次 Codelab 的学习,并了解到以下知识点:
最后分享一份鸿蒙(HarmonyOS)开发学习指南
第一章 快速入门
1、开发准备
2、构建第一个ArkTS应用(Stage模型)
3、构建第一个ArkTS应用(FA模型)
4、构建第一个JS应用(FA模型)
5、…
第二章 开发基础知识
1、应用程序包基础知识
2、应用配置文件(Stage模型)
3、应用配置文件概述(FA模型)
4、…
第三章 资源分类与访问
1、 资源分类与访问
2、 创建资源目录和资源文件
3、 资源访问
4、…
第四章 学习ArkTs语言
1、初识ArkTS语言
2、基本语法
3、状态管理
4、其他状态管理
5、渲染控制
6、…
第五章 UI开发
1.方舟开发框架(ArkUI)概述
2.基于ArkTS声明式开发范式
3.兼容JS的类Web开发范式
4…
第六章 Web开发
1.Web组件概述
2.使用Web组件加载页面
3.设置基本属性和事件
4.在应用中使用前端页面JavaScript
5.ArkTS语言基础类库概述
6.并发
7…
11.网络与连接
12.电话服务
13.数据管理
14.文件管理
15.后台任务管理
16.设备管理
17…
第七章 应用模型
1.应用模型概述
2.Stage模型开发指导
3.FA模型开发指导
4…
扫描下方二维码免费领取,《鸿蒙(HarmonyOS)开发学习指南》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。