> 技术文档 > DSBridge-HarmonyOS JavaScript端开发指南

DSBridge-HarmonyOS JavaScript端开发指南


DSBridge-HarmonyOS JavaScript端开发指南

【免费下载链接】DSBridge-HarmonyOS 鸿蒙原生ArkTS与JavaScript的交互桥接库 【免费下载链接】DSBridge-HarmonyOS 项目地址: https://gitcode.com/nutpi/DSBridge-HarmonyOS

本文详细介绍了DSBridge-HarmonyOS在JavaScript端的开发指南,包括初始化与函数注册、同步与异步调用原生API、进度回调与事件监听,以及兼容DSBridge 2.0与3.0脚本的实现方法。通过具体的代码示例和流程图,帮助开发者快速掌握与鸿蒙原生的交互技术。

JavaScript初始化与函数注册

DSBridge-HarmonyOS 提供了一套完整的 JavaScript 与鸿蒙原生交互的解决方案。本节将详细介绍如何在 JavaScript 端初始化 DSBridge 并注册函数,以便原生代码调用。

初始化 DSBridge

在 JavaScript 端,首先需要引入 DSBridge 库。可以通过 CDN 或 npm 安装:

// 通过 CDN 引入// 或者通过 npm 安装npm install m-dsbridge

初始化完成后,全局对象 dsBridge 将可用,用于后续的函数注册和调用。

函数注册

DSBridge 支持同步和异步函数的注册。以下分别介绍两种方式的实现。

同步函数注册

同步函数会立即执行并返回结果。使用 dsBridge.register 方法注册同步函数:

dsBridge.register(\'syncFunction\', function (arg1, arg2) { console.log(\'同步函数被调用,参数:\', arg1, arg2); return \'同步函数返回值\';});
异步函数注册

异步函数适用于需要长时间运行或需要回调的场景。使用 dsBridge.registerAsyn 方法注册异步函数:

dsBridge.registerAsyn(\'asyncFunction\', function (arg1, arg2, callback) { console.log(\'异步函数被调用,参数:\', arg1, arg2); setTimeout(() => { callback(\'异步函数返回值\'); }, 1000);});

异步函数的 callback 参数用于返回结果,支持多次回调(通过 callback 的第二个参数控制是否结束)。

函数调用示例

以下是一个完整的示例,展示如何注册并调用同步和异步函数:

// 注册同步函数dsBridge.register(\'getUserInfo\', function (userId) { return { name: \'张三\', age: 25, id: userId };});// 注册异步函数dsBridge.registerAsyn(\'fetchData\', function (url, callback) { fetch(url) .then(response => response.json()) .then(data => callback(data)) .catch(error => callback(null, error));});// 调用原生函数dsBridge.call(\'nativeFunction\', { key: \'value\' }, function (response) { console.log(\'原生函数返回:\', response);});

流程图

以下是一个简单的流程图,展示 JavaScript 与原生交互的过程:

mermaid

表格说明

方法名 描述 参数说明 dsBridge.register 注册同步函数 (函数名, 函数) dsBridge.registerAsyn 注册异步函数 (函数名, 函数) dsBridge.call 调用原生函数 (函数名, 参数, 回调函数)

注意事项

  1. 函数命名唯一性:确保注册的函数名唯一,避免冲突。
  2. 异步函数回调:异步函数必须调用 callback 返回结果,否则原生端会一直等待。
  3. 性能优化:避免在同步函数中执行耗时操作,以免阻塞主线程。

通过以上步骤,可以轻松完成 JavaScript 端的初始化和函数注册,实现与鸿蒙原生的无缝交互。

同步与异步调用原生API

在DSBridge-HarmonyOS中,JavaScript端可以通过同步和异步两种方式调用原生API。这两种方式各有适用场景,开发者可以根据需求灵活选择。以下将详细介绍这两种调用方式的具体实现和注意事项。


同步调用原生API

同步调用是指JavaScript端调用原生方法后,立即阻塞等待原生方法返回结果。这种方式适用于需要立即获取结果的场景。

代码示例
// JavaScript端调用原生同步方法let result = dsBridge.call(\'testSync\', JSON.stringify({ data: 100 }));console.log(\"同步调用结果:\", result);
原生实现

在原生代码中,同步方法需要通过@JavaScriptInterface(false)标注,并直接返回结果。

@JavaScriptInterface(false)testSync(p: string): string { LogUtils.d(\"testSync: \" + JSON.stringify(p)); return \"同步方法返回结果\";}
注意事项
  1. 阻塞性:同步调用会阻塞JavaScript线程,直到原生方法返回结果。
  2. 性能影响:频繁的同步调用可能会影响页面性能,建议在必要时使用。

异步调用原生API

异步调用是指JavaScript端调用原生方法后,立即返回,原生方法通过回调函数返回结果。这种方式适用于耗时操作或需要等待结果的场景。

代码示例
// JavaScript端调用原生异步方法dsBridge.call(\'testAsync\', JSON.stringify({ data: 200 }), (result) => { console.log(\"异步调用结果:\", result);});
原生实现

在原生代码中,异步方法需要通过@JavaScriptInterface()标注,并使用CompleteHandler回调结果。

@JavaScriptInterface()testAsync(p: string, handler: CompleteHandler) { LogUtils.d(\"testAsync: \" + JSON.stringify(p)); // 模拟异步操作 setTimeout(() => { handler.complete(\"异步方法返回结果\"); }, 1000);}
注意事项
  1. 非阻塞性:异步调用不会阻塞JavaScript线程,适合处理耗时操作。
  2. 回调函数:确保回调函数在适当的时机被调用,避免内存泄漏。

同步与异步的对比

特性 同步调用 异步调用 阻塞性 阻塞JavaScript线程 不阻塞JavaScript线程 适用场景 需要立即获取结果的场景 耗时操作或需要等待结果的场景 性能影响 可能影响页面性能 对性能影响较小 实现复杂度 简单 需要处理回调函数

进度回调(一次调用,多次返回)

在某些场景下,原生方法可能需要多次返回数据(如进度更新)。DSBridge-HarmonyOS支持通过CompleteHandler#setProgressData()实现。

代码示例
@JavaScriptInterface()testProgress(p: string, handler: CompleteHandler) { let counter = 0; const interval = setInterval(() => { if (counter < 5) { handler.setProgressData(\"进度更新: \" + counter); counter++; } else { handler.complete(\"任务完成\"); clearInterval(interval); } }, 1000);}

JavaScript端调用:

dsBridge.call(\'testProgress\', JSON.stringify({}), (progress) => { console.log(\"进度:\", progress);});

总结

通过DSBridge-HarmonyOS,JavaScript端可以灵活选择同步或异步方式调用原生API。同步调用适合简单、快速的交互,而异步调用适合耗时操作。开发者应根据实际需求选择合适的方式,并注意性能优化和回调处理。

进度回调与事件监听

在DSBridge-HarmonyOS的JavaScript端开发中,进度回调与事件监听是实现异步任务和状态监控的核心机制。本节将详细介绍如何在JavaScript端使用DSBridge提供的回调功能,以及如何监听和处理事件。

异步任务与进度回调

DSBridge支持异步任务的执行,并通过回调机制返回任务进度或结果。以下是一个典型的异步任务示例,展示了如何在JavaScript端调用原生方法并处理进度回调:

// JavaScript端调用原生异步方法dsBridge.call(\'testAsync\', \'参数\', function (progressData) { console.log(\'进度更新:\', progressData);}, function (result) { console.log(\'任务完成:\', result);});

在上述代码中:

  • testAsync 是原生端定义的异步方法。
  • 第一个回调函数用于接收进度更新。
  • 第二个回调函数用于接收任务完成的结果。
原生端实现

原生端通过 CompleteHandler 接口返回进度或结果。以下是一个原生端的实现示例:

@JavaScriptInterface()testAsync(args: string, handler: CompleteHandler) { LogUtils.d(\"testAsync: \" + JSON.stringify(args)); this.cHandler = handler; this.countdown(5, (time: number) => { if (time === 0) { handler.complete(\"任务完成\"); } else { handler.setProgressData(\"当前进度: \" + time); } });}
流程图

以下是一个异步任务执行的流程图:

mermaid

事件监听

DSBridge还支持事件监听机制,允许JavaScript端监听原生端触发的事件。例如,监听页面关闭事件:

// JavaScript端设置页面关闭监听dsBridge.setClosePageListener(function () { console.log(\'页面即将关闭\');});
原生端实现

原生端通过 OnCloseWindowListener 接口触发事件:

setClosePageListener(listener: OnCloseWindowListener): void { this.closeListener = listener;}
类图

以下是与事件监听相关的类图:

mermaid

总结表格

功能 JavaScript端调用方式 原生端实现接口 异步任务进度回调 dsBridge.call(method, args, progress, done) CompleteHandler 事件监听 dsBridge.setClosePageListener(callback) OnCloseWindowListener

通过上述机制,开发者可以轻松实现复杂的异步任务和事件监听功能,提升应用的用户体验和交互性。

兼容DSBridge 2.0与3.0脚本

在开发HarmonyOS应用时,DSBridge-HarmonyOS提供了对DSBridge 2.0和3.0脚本的兼容支持,确保开发者可以无缝迁移现有项目或根据需求选择适合的版本。本节将详细介绍如何实现兼容性,并提供代码示例和流程图帮助理解。

兼容性概述

DSBridge-HarmonyOS通过以下方式支持DSBridge 2.0和3.0脚本:

  1. API注册与调用:支持两种版本的API注册和调用方式。
  2. 命名空间:3.0版本支持命名空间,而2.0版本不支持。
  3. 异步任务处理:两种版本均支持同步和异步调用,但3.0版本提供了更灵活的异步任务管理。

兼容性实现

1. 原生侧兼容性

在原生代码中,可以通过WebViewControllerProxysupportDS2方法启用对DSBridge 2.0脚本的兼容支持。以下是一个示例:

aboutToAppear() { // 启用DSBridge 2.0兼容模式 this.controller.supportDS2(true); // 注册API this.controller.addJavascriptObject(new JsBridge());}
2. JavaScript侧兼容性

JavaScript脚本需要根据版本选择不同的初始化方式。以下是两种版本的初始化示例:

DSBridge 2.0脚本
// 引入DSBridge 2.0脚本// // 注册同步函数dsBridge.register(\'showAlert\', function (a, b, c) { alert(\"原生调用JS showAlert函数\" + a + \" \" + b + \" \" + c); return true;});// 调用原生同步方法let result = dsBridge.call(\'testSync\', JSON.stringify({data: 100}));
DSBridge 3.0脚本
// 引入DSBridge 3.0脚本// // 注册同步函数dsBridge.register(\'showAlert\', function (a, b, c) { alert(\"原生调用JS showAlert函数\" + a + \" \" + b + \" \" + c); return true;});// 调用原生同步方法let result = dsBridge.call(\'testSync\', JSON.stringify({data: 100}));

兼容性流程图

以下是一个流程图,展示了DSBridge 2.0和3.0脚本的兼容性处理流程:

mermaid

代码示例

原生侧代码
export class JsBridge { @JavaScriptInterface(false) testSync(p: string): string { return \"hello native\"; } @JavaScriptInterface() testAsync(p: string, handler: CompleteHandler) { handler.complete(\"异步返回的数据\"); }}
JavaScript侧代码
// 调用原生同步方法let result = dsBridge.call(\'testSync\', JSON.stringify({data: 100}));// 调用原生异步方法dsBridge.call(\'testAsync\', JSON.stringify({data: 200}), (msg) => { console.log(msg);});

注意事项

  1. 命名空间:DSBridge 2.0不支持命名空间,因此在兼容模式下无法使用命名空间功能。
  2. 调试:在开发过程中,可以通过webview.WebviewController.setWebDebuggingAccess(true)启用调试模式,方便排查问题。

通过以上步骤,开发者可以轻松实现DSBridge 2.0和3.0脚本的兼容性,确保项目在不同版本间的平滑过渡。

总结

DSBridge-HarmonyOS为JavaScript与鸿蒙原生交互提供了完整的解决方案。通过本文的学习,开发者可以掌握函数注册、同步/异步调用、进度回调和事件监听等核心功能,并了解如何兼容不同版本的DSBridge脚本。合理选择同步或异步调用方式,注意性能优化和回调处理,能够显著提升应用的用户体验和交互性。

【免费下载链接】DSBridge-HarmonyOS 鸿蒙原生ArkTS与JavaScript的交互桥接库 【免费下载链接】DSBridge-HarmonyOS 项目地址: https://gitcode.com/nutpi/DSBridge-HarmonyOS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考