HarmonyOS 鸿蒙Next元服务中AtomicServicesWeb无法接收到onMessage消息

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next元服务中AtomicServicesWeb无法接收到onMessage消息 在元服务开发中,我使用AtomicServicesWeb,添加了onMessage,但是H5页面发送消息时,元服务一直没有收到消息。我们H5里面使用元服务JS SDK的has.location.getLocation.是可以获取到定位的,说明SDK是成功接入了的。所以是什么原因呢?

6 回复

看到了,不过感觉这样的postMessage用途就很少了,只能用于页面返回数据处理,有点鸡肋。在元服务中,H5和原生数据交互有其他方法吗

更多关于HarmonyOS 鸿蒙Next元服务中AtomicServicesWeb无法接收到onMessage消息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


确认了下,目前没有其他方式了。

H5页面通过JS SDK的postMessage()发送消息后,Web组件对应的页面返回或销毁时,触发该回调。

需要从web页面返回到原生页面

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ohos-atomicservice-atomicserviceweb-V5#atomicserviceweb-1

demo:

//首页:
import { router } from '@kit.ArkUI'
@Entry
@Component
struct Index {
  build() {
    Column(){
      Text('hello')
    }
    .onClick(() =>{
      router.pushUrl({
        url: 'pages/Index'})
    })
  }
}
//web
import { AtomicServiceWeb, AtomicServiceWebController, OnMessageEvent } from '@kit.ArkUI';
@Entry
@Component
struct Index {
  @State controller: AtomicServiceWebController = new AtomicServiceWebController();
  build() {
    Column() {
      AtomicServiceWeb({
        src: $rawfile("index.html"),
        controller: this.controller,
        // H5页面点击“发送消息”后,再点击“返回上一页”,触发该回调
        onMessage: (event: OnMessageEvent) => {
          console.log(`[AtomicServiceWebLog] onMessage data=${JSON.stringify(event.data)}`);
        }
      })
    }
  }
}
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<!-- 引入JS SDK文件 -->
<script src="../js/asweb-sdk.umd.js" type="text/javascript"></script>
<body>
<h1>JS SDK - postMessage()</h1>
<br>
<button type="button" onclick="postMessage({ name: 'Jerry', age: 18 });">发送消息</button>
<br>
<button type="button" onclick="back();">返回上一页</button>
</body>
<script type="text/javascript">
    function postMessage(data) {
        // JS SDK提供的发送消息接口
        has.asWeb.postMessage({
            data: data,
            callback: (err, res) => {
                if (err) {
                    console.error('[AtomicServiceWebLog H5] postMessage error err=' + JSON.stringify(err));
                } else {
                    console.log('[AtomicServiceWebLog H5] postMessage success res=' + JSON.stringify(res));
                }
            }
        });
    }
    function back() {
        // JS SDK提供的Router路由回退接口
        has.router.back({
            delta: 1
        });
    }
</script>
</html>

//js
npm install @atomicservice/asweb-sdk

//找到asweb-sdk.umd.js ,放到rawfile/js目录下

感觉时抄小程序的,wx.minProgram.postMessage,妈的,是一模一样,只有返回,分享,销毁时触发,现在有实时通讯的解决办法吗?

项目名称

  • 状态:开发中
  • 开始时间:2023-02-13
  • 结束时间:2023-03-20

描述

这是项目的描述信息。

针对HarmonyOS鸿蒙Next元服务中AtomicServicesWeb无法接收到onMessage消息的问题,这通常涉及到服务间的通信机制或事件监听配置。以下是一些可能的原因及检查方向:

  1. 权限与配置:确保AtomicServicesWeb服务已正确配置接收消息的权限和必要的服务声明。检查manifest.json或相关配置文件中是否已正确声明服务及所需权限。

  2. 事件注册:验证AtomicServicesWeb服务是否已正确注册onMessage事件监听器。确保事件监听器已在服务启动时正确设置,且没有因代码错误或逻辑问题导致监听器未能正确绑定。

  3. 消息发送方:检查发送消息的组件或服务是否正确指向了AtomicServicesWeb服务的标识符,并使用了正确的消息格式和协议。

  4. 日志与调试:利用鸿蒙系统提供的日志工具,查看是否有关于消息发送或接收失败的日志记录。这有助于定位问题发生的具体环节。

  5. 服务状态:确认AtomicServicesWeb服务在运行过程中是否处于活跃状态,且没有因系统资源限制或其他服务干扰而导致服务异常终止。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部