鸿蒙Next ArkTS与H5通信方法
如何在鸿蒙Next中使用ArkTS与H5页面进行双向通信?希望能了解具体的实现方法,比如调用方式、参数传递和回调处理等细节,最好能提供简单的代码示例。
2 回复
鸿蒙Next里,ArkTS和H5通信就像两个邻居隔墙喊话。用WebviewController的postMessage()发消息,H5那边用window.onmessage接。反过来H5用window.parent.postMessage(),ArkTS用onMessageEvent收。记得两边约定好暗号(消息格式),别喊错人!
更多关于鸿蒙Next ArkTS与H5通信方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中,ArkTS与H5(Web组件)的通信主要通过WebviewController实现双向交互。以下是具体方法及示例代码:
1. ArkTS调用H5方法
使用runJavaScript执行H5中的JavaScript函数。
ArkTS侧代码:
import webview from '@ohos.web.webview';
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
// 加载H5页面
Web({ src: $rawfile('index.html'), controller: this.controller })
.onPageEnd(() => {
// 页面加载完成后调用H5的jsFunction方法
this.controller.runJavaScript('jsFunction("Hello from ArkTS!")');
})
}
}
}
H5侧代码(index.html):
<script>
// 定义被ArkTS调用的函数
function jsFunction(message) {
document.getElementById("msg").innerHTML = message;
}
</script>
2. H5调用ArkTS方法
通过WebMessagePort建立双向通信通道:
ArkTS侧代码:
// 1. 创建消息端口
private msgPort: WebMessagePort = null;
aboutToAppear() {
// 2. 创建消息端口并注册回调
this.msgPort = this.controller.createWebMessagePort();
this.msgPort.onMessageEvent((result: WebMessage) => {
// 接收H5发送的数据
console.log('Received from H5:' + result.getData());
});
// 3. 将端口注入到H5的window对象中
this.controller.postMessage('__init_port__', [this.msgPort], '*');
}
// 4. 定义供H5调用的方法
@ExposeToWeb({ name: 'arktsMethod' })
arktsMethod(param: string) {
console.log('H5调用成功,参数:' + param);
return 'ArkTS响应数据';
}
H5侧代码:
// 接收ArkTS注入的端口
window.addEventListener('message', (event) => {
if (event.data === '__init_port__') {
window.arkPort = event.ports[0];
// 向ArkTS发送消息
arkPort.postMessage('Hello from H5!');
// 调用ArkTS暴露的方法
if (window.arktsMethod) {
let result = window.arktsMethod('H5参数');
console.log('ArkTS返回:' + result);
}
}
});
关键要点:
- 权限配置:在
module.json5中声明网络权限:"requestPermissions": [ { "name": "ohos.permission.INTERNET" } ] - 安全限制:需使用
$rawfile加载本地H5,或配置domStorageAccess启用跨域访问。 - 数据类型:支持字符串、数字等基本类型,复杂数据需序列化。
通过以上方法即可实现ArkTS与H5的高效双向通信。

