HarmonyOS中,html 与 ets 桥接沟通

需要先初始化webview.WebMessagePort,然后一个ets使用,发送一个端口给html去用。

来个视频展示一下效果(文件有点大,1.8M,估计要载入一会儿):

6月25日

这里的流程蛮有意思的,画个图解释一下。

鸿蒙html通信

ets端

// ...

const HARMONY_PORT = 0;

const HTML_PORT = 1;

// ...

export default struct AppWebViewPage {

// ...

build() {

Web({

src: this.url,

controller: this.webviewController,

})

.onPageEnd(() => {

try {

this.ports = this.webviewController.createWebMessagePorts() || \[\];

// 这里会返回2个端口。

// 有点类似于 实例化了一个网页和鸿蒙之间发送消息的管道,然后把管道的两个头作为端口返回回来

// 所以这里就有有2个端口,也就是这个通信管道的2个头

// 那么

// 1. 使用 HARMONY_PORT 端口,作为鸿蒙的端口,用来发送和接收消息

// 2. 使用 HTML_PORT 端口,作为html的端口,把这个端口通过 HARMONY_PORT 端口发给html,让html来使用。

if (!this.ports || this.ports.length < 2) {

hilog.error(1, 'Error', '创建端口失败:返回端口数量不足');

return;

}

/* 端口0, 给鸿蒙端使用 /
this.portsHARMONY_PORT.onMessageEvent((result: webview.WebMessage) => {
this.onMessageEvent(result);
});
/
端口1, 发送给html进行使用 /
this.webviewController.postMessage('init__project', this.ports\[HTML_PORT], '
');

} catch (e) {

hilog.error(1, 'Error', '初始化 WebMessagePort 失败:' + JSON.stringify(e));

}

})

}

/**

  • 接收到H5消息
  • @param result
    */
    private onMessageEvent(result: webview.WebMessage) {
    let msg = '';
    try {
    msg = result.toString() || '';
    hilog.info(1, 'INFO', 'onMessageEvent:' + msg);
    } catch (e) {
    hilog.error(1, 'Error', '获取消息字符串失败:' + JSON.stringify(e));
    return;
    }
    }

/**

  • 向H5发布消息
  • @param message
    */
    public sendMessageToH5(message: string) {
    hilog.info(1, 'INFO', 'sendMessageToH5:' + message);
    try {
    this.portsHARMONY_PORT.postMessageEvent(message);
    } catch (error) {
    hilog.error(1, 'Error', '向H5发布消息失败:' + JSON.stringify(error));
    }
    }
    }
    html 端

Harmony H5 Demo

H5 Page

发送消息到鸿蒙侧

日志记录

复制代码
相关推荐
HarmonyOS_SDK2 小时前
【HarmonyOS SDK Skills】快速适配鸿蒙窗口智感旋转能力
harmonyos
马剑威(威哥爱编程)3 小时前
【HarmonyOS 7 小艺智能体实战】02:动工前的清单——账号、资质、工具链一次备齐
人工智能·华为·harmonyos
熊猫钓鱼>_>3 小时前
端侧高斯泼溅(3DGS)渲染与性能调优初探:把“实景重建“跑在手机上【鸿蒙心迹】
开发语言·3d·华为·智能手机·harmonyos
java1234_小锋3 小时前
【技术专题】HTML5 网页技术 - Web Storage 本地存储 & 文件 API & 拖放 API
前端·html·html5
2501_919749033 小时前
分享一款实用的鸿蒙App,整体感觉不错
华为·harmonyos
贵州诚鑫致达科技有限公司3 小时前
接入汇聚都是环怎么防环路?华为SEP加RRPP混合环
服务器·华为·php
三掌柜6663 小时前
04|鸿蒙7·端侧AI实战:检索增强,把证据带进回答
人工智能·华为·harmonyos
心态还需努力呀3 小时前
把 Zettlr 搬上鸿蒙 PC:墨匣学术写作编辑器移植与上架全记录
华为·编辑器·harmonyos
狮子座的男孩3 小时前
html+css基础:24、2D变换(位移/缩放/旋转/扭曲(了解)/多重变换/变换原点)
前端·css·经验分享·html·2d位移·原点变换·缩放/旋转/扭曲
特立独行的猫a4 小时前
AI时代的应用开发神器:cj-tauri 已支持鸿蒙 PC,第一次的踩坑记录
ui·harmonyos·tauri·仓颉·鸿蒙pc·cj-tauri