当前位置: 首页 > article >正文

【每日学点鸿蒙知识】Web组件加载空白、C++回调ArkTS、底部横幅隐藏显示、构建warn过多、ArkTS与C++实时通信

1、HarmonyOS web组件加载页面空白?

在加载一些url,前端页面的头部title和返回按钮都能显示出来,但是主题内容就是空白。

请在WebView 组件加上属性.domStorageAccess(true),设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。参考指导文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#domstorageaccess

domStorageAccess(domStorageAccess: boolean) 设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。

2、HarmonyOS 如何在ArkTS中向C++层注册回调,C++层如何调用回调方法?

需要将c++层的播放状态回调给到ArtTs的界面层,不知道如何通过NAPI实现,希望能给出一个实现方案

可以使用 napi_call_function 函数实现在Native中调用js function,参考代码如下:
1、在index.d.ts中链接ArkTS侧函数与C++侧函数:

export const nativeCallArkTS: (cb: (a: string) => string) => string; 

2、在C++测调用ArkTS侧函数:

static napi_value NativeCallArkTS(napi_env env, napi_callback_info info) {
  size_t argc = 1;
  // 声明参数数组
  napi_value args[1] = {nullptr};
  ​
  // 获取传入的参数并依次放入参数数组中
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
  ​
  // 创建一个string,作为ArkTS的入参
  napi_value argv = nullptr;
  napi_create_string_utf8(env, "yes", 3, &argv);

  ​
  // 调用传入的callback,并将其结果返回
  napi_value result = nullptr;
  napi_call_function(env, nullptr, args[0], 1, &argv, &result);
  return result;
}

3、将NativeCallArkTS接口导出:

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
  napi_property_descriptor desc[] = {
  {"nativeCallArkTS", nullptr, NativeCallArkTS, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END

4、在ArkTS中调用函数:

import nativeFun from 'libentry.so';
​
@Entry
@Component
struct Index {
  @State message: string = 'nativeCallArkTS';
  ​
  build() {
    Row() {
      Column() {
        Text(this.message)
          .onClick(() => {
            this.message += nativeFun.nativeCallArkTS((a: string)=> {
              return a })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
3、HarmonyOS 界面底部的横条怎么显示和隐藏?

参考链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-window-stage-V5
参考代码:

onWindowStageCreate(windowStage: window.WindowStage) {
  windowStage.getMainWindow().then((windowObj) => {
    windowObj.setWindowLayoutFullScreen(true);
    windowObj.setWindowSystemBarEnable(['status'])
  });
}

应用窗口相关概念:

  • 窗口沉浸式能力:指对状态栏、导航栏等系统窗口进行控制,减少状态栏导航栏等系统界面的突兀感,从而使用户获得最佳体验的能力。
    沉浸式能力只在应用主窗口作为全屏窗口时生效。通常情况下,应用子窗口(弹窗、悬浮窗口等辅助窗口)和处于自由窗口下的应用主窗口无法使用沉浸式能力。
  • 悬浮窗:全局悬浮窗口是一种特殊的应用窗口,具备在应用主窗口和对应Ability退至后台后仍然可以在前台显示的能力。
    悬浮窗口可以用于应用退至后台后,使用小窗继续播放视频,或者为特定的应用创建悬浮球等快速入口。应用在创建悬浮窗口前,需要申请对应的权限。
4、hap构建过程中warn过多,有时找不到error?

hap构建过程中warn过多,有时找不到error,怎么才能关掉warn的回显

可以在"file"->“setting”->搜索->“hvigor”->“use log level”,这里选择hvigor输出的日志等级

5、HarmonyOS ArkTs和C++实时通信?

C++层执行过程会产生大量的日志,目前是直接输出在控制台,现在想实时输出到ArkTs的UI上,是要写一个回调吗?对NAPI不熟悉,看文档没有找到合适的方法。有什么建议吗

需要通过回调的方式实现,你可以参考以下示例代码实现 的需求:
1、在index.d.ts中链接ArkTS侧函数与C++侧函数:

export const nativeCallArkTS: (cb: (a: string) => string) => string; 

2、在C++测调用ArkTS侧函数:

static napi_value NativeCallArkTS(napi_env env, napi_callback_info info) {
  size_t argc = 1;
  // 声明参数数组
  napi_value args[1] = {nullptr};
  ​
  // 获取传入的参数并依次放入参数数组中
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
  ​
  // 创建一个string,作为ArkTS的入参
  napi_value argv = nullptr;
  napi_create_string_utf8(env, "yes", 3, &argv);

  ​
  // 调用传入的callback,并将其结果返回
  napi_value result = nullptr;
  napi_call_function(env, nullptr, args[0], 1, &argv, &result);
  return result;
}

3、将NativeCallArkTS接口导出:

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
  napi_property_descriptor desc[] = {
  {"nativeCallArkTS", nullptr, NativeCallArkTS, nullptr, nullptr, nullptr, napi_default, nullptr}
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END

4、在ArkTS中调用函数:

import nativeFun from 'libentry.so';
​
@Entry
@Component
struct Index {
  @State message: string = 'nativeCallArkTS';
  ​
  build() {
    Row() {
      Column() {
        Text(this.message)
          .onClick(() => {
            this.message += nativeFun.nativeCallArkTS((a: string)=> {
              return a })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

http://www.kler.cn/a/457284.html

相关文章:

  • Unity3D 网络框架设计详解
  • 小程序分包优化实践:解决主包过大和vendor.js体积问题
  • Unity-Mirror网络框架-从入门到精通之Basic示例
  • Java中实现对象的深拷贝(Deep Copy)
  • 如何使用网络工具进行网络性能评估
  • Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程
  • 深入了解SpringIoc(续篇)
  • Docmatix:突破性的文档视觉问答数据集
  • 从头开始学SpringMVC—01MVC介绍和入门案例
  • ​Python数据序列化模块pickle使用
  • 如何快速又安全的实现端口转发【Windows MAC linux通用】
  • yolov8算法及其改进
  • Golang的文件加密工具
  • Word批量更改题注
  • Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击
  • 问题-01
  • 学习C++:数据类型
  • Jmeter录制https请求
  • 在asp.net webapi项目中 将数据库连接字符串写在配置文件中,及Program配置Serilog存放路径以及设置
  • JavaWeb期末复习
  • Wordly Wise 3000 国际背单词01 介绍 + 测词汇量
  • 【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
  • Python 占位符详细笔记
  • C语言的数据结构
  • vue3 video 播放rtmp视频?(360浏览器支持)
  • mysql系列7—Innodb的redolog