当前位置: 首页 > ds >正文

【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例

【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例

一、前言

在 ArkUI 开发中,Web 组件(Web)允许开发者在应用内嵌入网页,实现混合开发场景。

本文将通过完整 DEMO,详解如何通过WebviewController实现 ArkUI 与内嵌网页的双向通信,涵盖 ArkUI 调用网页 JS、网页调用 ArkUI 对象的核心技术点。

二、双向通信实现原理

1、双向通信概念
Web 到 ArkUI(反向通信)通过registerJavaScriptProxy将 ArkUI 对象注册到网页的window对象,允许网页通过window.xxx调用 ArkUI 暴露的方法。​

ArkUI 到 Web(正向通信)通过runJavaScript执行网页 JS 代码,支持回调获取返回值,实现原生代码调用网页函数。

2、双向通信流程图
ArkUI Web
┌──────────────┐ ┌──────────────┐
│ registerJS ├─────────────▶ window.objName │
│ (反向注册) │ ├──────────────┤
├──────────────┤ │ call test() │
│ runJavaScript├─────────────▶ execute JS code │
│ (正向调用) │ ├──────────────┤
└──────────────┘ └──────────────┘

三、双向通信实现步骤

1、ArkUI 定义可被网页调用的对象
创建一个TestObj类,声明允许网页调用的方法(白名单机制):

class TestObj {// 网页可调用的方法1:返回字符串test(): string {return "ArkUI Web Component";}// 网页可调用的方法2:打印日志toString(): void {console.log('Web Component toString');}// 网页可调用的方法3:接收网页消息receiveMessageFromWeb(message: string): void {console.log(`Received from web: ${message}`);}
}

2、ArkUI 组件核心代码
初始化控制器与状态



struct WebComponent {// Webview控制器controller: webview.WebviewController = new webview.WebviewController();// 注册到网页的ArkUI对象 testObj: TestObj = new TestObj();// 注册名称(网页通过window.[name]访问) regName: string = 'objName';// 接收网页返回数据 webResult: string = '';build() { /* 组件布局与交互逻辑 */ }
}

布局与交互按钮,添加三个核心功能按钮:

Column() {// 显示网页返回数据Text(`Web返回数据:${this.webResult}`).fontSize(16).margin(10);// 1. 注册ArkUI对象到网页Button('注册到Window').onClick(() => {this.controller.registerJavaScriptProxy(this.testObj,  // ArkUI对象this.regName,  // 网页访问名称["test", "toString", "receiveMessageFromWeb"]  // 允许调用的方法白名单);})// 2. ArkUI调用网页JSButton('调用网页函数').onClick(() => {this.controller.runJavaScript('webFunction("Hello from ArkUI!")',  // 执行网页JS代码(error, result) => {  // 回调处理返回值if (!error) this.webResult = result || 
http://www.xdnf.cn/news/4680.html

相关文章:

  • 晶体布局布线
  • 【CUDA C实战演练】CUDA介绍、安装、C代码示例
  • 电商双十一美妆数据分析(代码)
  • MapReduce中的分区器
  • Ceph 原理与集群配置
  • 网络技术基础,NAT,桥接,交换机,路由器
  • 关于Stream
  • paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案
  • 如何避免“救火式管理”消耗精力
  • EEG设备的「减法哲学」:Mentalab Explore如何用8通道重构高质量脑电信号?
  • C++20新特新——02特性的补充
  • 数字乡村综合管理与服务平台软件需求规格说明文档
  • Office365功能特点
  • vue3:十二、图形看板- 基础准备+首行列表项展示
  • MySQL基础关键_011_视图
  • MCU怎么运行深度学习模型
  • 跨境电商生死局:动态IP如何重塑数据生态与运营效率
  • 【PhysUnits】2.2 Scalar<T> 标量元组结构体(scalar/mod.rs)
  • 文章记单词 | 第66篇(六级)
  • 数据库 postgresql 修改密码 sh
  • 大模型赋能:2D 写实数字人开启实时交互新时代
  • 利用并行处理提高LabVIEW程序执行速度
  • 详解0-1背包的状态转移表
  • 前端实现文件下载
  • 案例分享 | 攻克ADAS开发测试难题,实现单元动态测试新突破
  • 力扣刷题Day 34:随机链表的复制(138)
  • MySQL大数据量查询优化
  • angular的cdk组件库
  • 苍穹外卖(订单状态定时处理、来单提醒和客户催单)
  • hadoop中的序列化和反序列化(4)