HarmonyOS鸿蒙Next中webview组件javaScriptProxy在接收部分嵌套较深的数组时数组的每一项会变成null

HarmonyOS鸿蒙Next中webview组件javaScriptProxy在接收部分嵌套较深的数组时数组的每一项会变成null

webview组件javaScriptProxy在接收部分嵌套较深的数组时数组的每一项会变成null

  1. 页面添加webview组件,并注册javaScriptProxy
import webview from '@ohos.web.webview';

@Entry
@Component
struct Index {
  controller: webview.WebviewController = new webview.WebviewController()

  build() {
    Column() {
      Web({
        src: $rawfile('test.html'),
        controller: this.controller
      })
        .javaScriptProxy({
          object: {
            invoke(name: string, args: object) {
              console.log('invoke args:' + JSON.stringify(args))
            }
          },
          controller: this.controller,
          methodList: ['invoke'],
          name: 'globalChannel'
        })
    }
  }
}
  1. rawfile下创建test.html 内容如下
<!Document>
<html>

<head>
    <title>测试</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<style>
    html,
    body {
      margin: 0px;
      padding: 0px;
    }

    button {
      width: 100%;
      height: 50px;
    }
</style>

<body>
<div>
    <div>
        <div>test.html</div>
        <button id="echo">echo</button>
    </div>
</div>
<script>

    document.querySelector('#echo').addEventListener('click', async () => {
      globalChannel.invoke(
        'echo',
        [
          {
            "args": {
              "data": [
                [
                  {
                    "currentTarget": {
                      "dataset": {
                        "info": {
                          "deliverMethod": [
                            "E_TICHED",
                            {
                              testArr1: [1, 2, 3]
                            }
                          ],
                          "testArr2": [1, 2, 3]
                        }
                      },
                    }
                  }
                ]
              ]
            },
          }
        ]
      )
    })
</script>
</body>

</html>

点击webview内的echo按钮,打印日志如下

invoke args:[{"args":{"data":[[{"currentTarget":{"dataset":{"info":{"deliverMethod":[null,null],"testArr2":[null,null,null]}}}}]]}}]

可以看到前台比较深的数组中的每一项都变成了null


更多关于HarmonyOS鸿蒙Next中webview组件javaScriptProxy在接收部分嵌套较深的数组时数组的每一项会变成null的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

方法的参数和返回类型支持Dictionary,Array,最多嵌套10层

Dictionary,Array,最多嵌套10层,每层1w个数据。参考连接

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#registerjavascriptproxy

更多关于HarmonyOS鸿蒙Next中webview组件javaScriptProxy在接收部分嵌套较深的数组时数组的每一项会变成null的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,webview组件的javaScriptProxy功能用于实现JavaScript与原生代码的交互。当接收嵌套较深的数组时,可能会出现数组项变为null的问题。这通常是由于数据在跨语言传递过程中,序列化与反序列化机制导致的。鸿蒙系统在处理复杂数据结构时,可能会丢失部分信息或无法正确解析嵌套层次较深的数据,从而导致数组项变为null

具体原因可能是:

  1. 数据传递过程中,嵌套层次过深导致序列化失败。
  2. javaScriptProxy在处理复杂数据结构时,存在限制或未完全支持某些数据类型。
  3. 数据格式不符合预期,导致反序列化时无法正确解析。

解决方法包括:

  • 简化数据结构,减少嵌套层次。
  • 确保数据格式符合javaScriptProxy的要求。
  • 使用其他方式传递复杂数据,如将数据转换为字符串后再传递。

注意:以上内容仅针对问题描述,不涉及Java或C语言相关内容,且未提供建议或咨询华为开发者支持。

在HarmonyOS鸿蒙Next中,WebView组件的javaScriptProxy在接收嵌套较深的数组时,可能会遇到数组项变为null的问题。这通常是由于跨语言数据传递时的序列化与反序列化机制导致的。建议在传递数据前,手动将嵌套数组扁平化或转换为JSON字符串,确保数据结构的完整性。另外,检查javaScriptProxy的配置,确保其支持复杂数据类型的传递。

回到顶部