diff --git a/frameworks/napi/BUILD.gn b/frameworks/napi/BUILD.gn index 9cc250dcd57bc0b4a4116c09ec64a68f345d7cf4..0e99e2803de86561058993e81d08bfaa78962cde 100644 --- a/frameworks/napi/BUILD.gn +++ b/frameworks/napi/BUILD.gn @@ -28,6 +28,7 @@ if (is_arkui_x) { "//third_party/libuv/include", ] include_dirs += emitter_include + defines = ["CROSS_PLATFORM"] sources = [ "src/events_emitter.cpp", "src/init.cpp", diff --git a/frameworks/napi/src/events_emitter.cpp b/frameworks/napi/src/events_emitter.cpp index a11966e94301c0f235ba843a0fb0e1c5ad3a7ed1..93a7747311d61d5489abd8fa4376083ed4e732be 100644 --- a/frameworks/napi/src/events_emitter.cpp +++ b/frameworks/napi/src/events_emitter.cpp @@ -24,7 +24,9 @@ #include "event_logger.h" #include "js_native_api_types.h" #include "napi/native_node_api.h" +#ifndef CROSS_PLATFORM #include "napi/native_node_hybrid_api.h" +#endif #include "interops.h" using namespace std; @@ -84,11 +86,19 @@ namespace { return; } else { if (eventDataInner->data != nullptr && *(eventDataInner->data) != nullptr) { +#ifdef CROSS_PLATFORM + if (napi_deserialize(callbackInner->env, *(eventDataInner->data), &resultData) != napi_ok || + resultData == nullptr) { + HILOGE("Deserialize fail."); + return; + } +#else if (napi_deserialize_hybrid(callbackInner->env, *(eventDataInner->data), &resultData) != napi_ok || resultData == nullptr) { HILOGE("Deserialize fail."); return; } +#endif } } napi_value event = nullptr; @@ -523,7 +533,14 @@ namespace { napi_get_named_property(env, argv, "data", &data); napi_value undefined = nullptr; napi_get_undefined(env, &undefined); +#ifdef CROSS_PLATFORM + bool defaultTransfer = false; + bool defaultCloneSendable = false; + napi_status serializeResult = napi_serialize_inner(env, data, undefined, undefined, + defaultTransfer, defaultCloneSendable, &serializeData); +#else napi_status serializeResult = napi_serialize_hybrid(env, data, undefined, undefined, &serializeData); +#endif if (serializeResult != napi_ok || serializeData == nullptr) { HILOGE("Serialize fail."); return false;