HarmonyOS鸿蒙Next中使用WebMessagePort给Vue侧的H5通信失败
HarmonyOS鸿蒙Next中使用WebMessagePort给Vue侧的H5通信失败 【问题描述】:我们的登录页面是网页然后和客户端做交互,如果用户不勾选协议,点击登录,需要通信到H5,目前我是用的WebMessagePort发送消息,且参考的代码是这个:https://gitee.com/harmonyos_samples/accountkit-samplecode-clientdemo-h5/blob/master/entry/src/main/ets/pages/LoginPage.ets
【问题现象】:现在遇到一个客户端和H5链接成功,客户端也能收到H5发的消息,但给H5发消息 ,H5收不到

【版本信息】:6.0
【复现代码】:
【尝试解决方案】:
更多关于HarmonyOS鸿蒙Next中使用WebMessagePort给Vue侧的H5通信失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,根据官网代码和您的示例截图来看,可能和您的 that.handleMessageFromNative() 有关;
h5Port.onmessage 回调事件中的function存在一个参数 event(参数来自于handleMessage),导致下面调用中’data’不存在。
您可以发一下handleMessageFromNative函数的代码这边看下;
更多关于HarmonyOS鸿蒙Next中使用WebMessagePort给Vue侧的H5通信失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
handleMessageFromNative(event) {
console.log('📨 收到客户端消息', event.data);
try {
// 解析JSON消息
const eventData = JSON.parse(event.data);
const eventId = eventData.eventId;
const value = eventData.value;
// 根据事件ID进行处理
switch (eventId) {
case 'loginStart':
// 登录开始
console.log('🔄 华为登录开始...');
// showLoading();
break;
case 'loginEnd':
// 登录结束
console.log('✅ 华为登录结束');
// hideLoading();
break;
case 'notAccepted':
// 用户未勾选协议
console.log('⚠️ 用户未同意协议');
// hideLoading();
// showAgreementDialog();
break;
default:
console.log('ℹ️ 未处理的事件', { eventId, value });
}
} catch (error) {
console.log('❌ 解析客户端消息失败', error.message);
}
}
this.h5Port.onmessage = that.handleMessageFromNative(event);
解决了,谢谢,
在HarmonyOS Next中,使用WebMessagePort与Vue侧H5通信失败,可能原因包括:WebMessagePort未正确初始化或配对;端口未在ArkTS侧通过postMessage发送给H5;H5侧未通过onmessage事件监听接收消息;消息传递的数据格式不符合要求;或Web组件未启用JavaScript支持。需确保两端端口建立连接且消息监听机制正确。


