HarmonyOS native层js代码调用

在native中调用js对象代码:

napi_value js;
napi_status ret = napi_get_reference_value(context.env, context.jsOb, &js);
if (ret != napi_ok) {
  OH_LOG_ERROR(LOG_APP, "napi_get_reference_value ERROR");
  return nullptr;
}
napi_value publicMethod;
ret = napi_get_named_property(context.env, js, "privateMethod", &publicMethod);
if (ret != napi_ok || publicMethod == nullptr) {
  OH_LOG_ERROR(LOG_APP, "napi_get_named_property ERROR");
  return nullptr;
}
OH_LOG_ERROR(LOG_APP, "readSomeThing#2");
napi_call_function(context.env, js, publicMethod, 0, nullptr, nullptr);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

但如果是命名空间里的方法怎么操作,命名空间如果传递到native层? native层如果调用命名空间中的js代码

HarmonyOS
2024-12-19 17:03:50
671浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

在JS中定义命名空间和方法:

const myNamespace = {
  myMethod: function () {
    console.log('Hello from myMethod!');
  }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

在JS中将命名空间和方法绑定到一个对象上,并将该对象返回给native层:

module.exports = {
  myNamespace: myNamespace
};
在native层获取JS对象并调用命名空间中的方法:
napi_value
js;
napi_status
ret = napi_get_reference_value(context.env, context.jsOb, & js
);
if (ret != napi_ok) {
  OH_LOG_ERROR(LOG_APP, 'napi_get_reference_value ERROR');
  return nullptr;
}

napi_value
myNamespaceObj;
ret = napi_get_named_property(context.env, js, 'myNamespace', & myNamespaceObj
);
if (ret != napi_ok || myNamespaceObj == nullptr) {
  OH_LOG_ERROR(LOG_APP, 'napi_get_named_property ERROR');
  return nullptr;
}

napi_value
myMethod;
ret = napi_get_named_property(context.env, myNamespaceObj, 'myMethod', & myMethod
);
if (ret != napi_ok || myMethod == nullptr) {
  OH_LOG_ERROR(LOG_APP, 'napi_get_named_property ERROR');
  return nullptr;
}

napi_call_function(context.env, myNamespaceObj, myMethod, 0, nullptr, nullptr);
 

// 定义命名空间
namespace MyNamespace {
  export function myMethod() {
    console.log('Hello from myMethod');
  }
}

// 将命名空间绑定到全局对象上
globalThis.MyNamespace = MyNamespace;

// 获取全局对象
napi_value
gloableThisl;
napi_get_global(env, & gloableThis
);
// 获取命名空间对象
napi_value
namespaceObj;
napi_get_named_property(env, gloableThis, "MyNamespace", & namespaceObj
);
// 获取命名空间中的方法
napi_value
method;
napi_get_named_property(env, namespaceObj, "myMethod", & method
);
// 调用命名空间中的方法
napi_value
result;
napi_call_function(env, global, method, 0, nullptr, &result);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.

相关文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-process-V5

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-object-wrap-V5

分享
微博
QQ
微信
回复
2024-12-19 19:02:24


相关问题
HarmonyOS 如何调用js代码
612浏览 • 1回复 待解决
通过Native 调用c++实现文本绘制
1760浏览 • 1回复 待解决
HarmonyOS C++如何同步调用JS函数 -
660浏览 • 0回复 待解决
ArkTS调用js/ts代码会有性能损耗吗
3669浏览 • 2回复 待解决
HarmonyOS native文件读写权限
698浏览 • 1回复 待解决
native创建socket异常
1155浏览 • 1回复 待解决
HarmonyOS native是否支持curl和openSSL
1139浏览 • 1回复 待解决
HarmonyOS Native获取应用路径的方式
964浏览 • 1回复 待解决
如何在native获取屏幕亮度
2369浏览 • 1回复 待解决
如何在Native加载so库
2549浏览 • 1回复 待解决
native多进程场景的调试
852浏览 • 1回复 待解决
HarmonyOS ArkTS调用JS
545浏览 • 1回复 待解决
JS代码require到沙箱的JS文件
633浏览 • 1回复 待解决
HarmonyOS web组件注入JS代码
508浏览 • 1回复 待解决
恭喜您,今日已阅读两篇内容,特奖励+2声望, 快来领取吧。