HarmonyOS鸿蒙Next中快应用与网页通信踩坑合集处理

HarmonyOS鸿蒙Next中快应用与网页通信踩坑合集处理 【关键词】

Web、postMessage、onMessage

【问题背景】

快应用中通过web组件加载的h5网页,快应用在和网页进行通信时,经常会遇到网页发送信息给快应用,快应用成功收到,反过来的时候,h5网页就没法收到了。如提示 xxx is not definedonmessage is not a function 等问题,这里就带来这些问题的解决办法。

【问题分析】

问题一:xxx is not defined

如下所示:

快应用端

sendMessage: function () {    
    this.$element('web').postMessage({ message: 'message to Web page' });
}

H5端

system.onmessage = function(data) {
    console.info("onmessage data=" + data);
    //todo
}

该问题出现的原因是h5端收到的消息参数没定义导致的,但通常检查时会发现是有在快应用中定义的,这就让不少人费解了。我们可以来看下文档中的介绍:

看到这里,很多人会认为文档上是xxx:xxx形式的,我在快应用中也是这样的啊,应该是没问题的。其实不然,这里的参数名是固定的,应该是message:xxxx形式,只有这样写在h5端才能收到消息。

问题二:h5端提示onmessage is not a function

如下所示:

H5端

Window.system.onmessage(res=>{
    Console.log("onmessage data=" + data)
})

该问题的原因是h5端调用onmessage方法的方式错误导致的,同样看下文档上所描述的

这里该事件的描述是一个可以携带参数的方法,而不是一个有回调结果的方法,所以按正常函数方法的形式去写就可以了。

到这里大家就知道上面两个问题如何去修改了,具体可以看下面的解决方案。

【解决方案】

问题一:

快应用端做如下修改即可,h5端不用变更:

sendMessage: function () {    
    this.$element('web').postMessage({ message: 'message to Web page' });
}

或者

sendMessage: function () {    
    let senddata={"message":nativeAdMsg};
    this.$element('web').postMessage(senddata);
}

问题二:

H5端改成如下形式去接收就可以

system.onmessage = function(data) {
    console.info("onmessage data=" + data);
    //todo
}

更多关于HarmonyOS鸿蒙Next中快应用与网页通信踩坑合集处理的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中快应用与网页通信踩坑合集处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,快应用与网页通信时常见问题及处理方案如下:

  1. 通信协议不匹配:确保快应用与网页使用相同的通信协议(如WebSocket或HTTP),并检查接口定义是否一致。

  2. 跨域问题:网页与快应用通信时,需配置CORS(跨域资源共享)策略,确保允许跨域请求。

  3. 数据格式错误:通信数据需统一为JSON格式,避免因格式不一致导致解析失败。

  4. 权限不足:检查快应用和网页的权限配置,确保双方具备必要的通信权限。

  5. 调试工具使用:利用鸿蒙开发者工具进行调试,定位通信问题并优化代码。

通过以上措施,可有效解决快应用与网页通信中的常见问题。

回到顶部