diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp index eac24ef11daf28923eae5593f97d753d8c09d098..cfed006d66ecbfb482984c44d634665846c89a30 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp @@ -20,6 +20,7 @@ #include "base/log/ace_trace.h" #include "base/memory/ace_type.h" #include "base/memory/referenced.h" +#include "base/subwindow/subwindow_manager.h" #include "base/utils/system_properties.h" #include "base/utils/utils.h" #include "bridge/common/utils/engine_helper.h" @@ -157,6 +158,15 @@ void JSView::GetInstanceId(const JSCallbackInfo& info) info.SetReturnValue(JSRef::Make(ToJSValue(instanceId_))); } +void JSView::GetMainInstanceId(const JSCallbackInfo& info) +{ + int32_t currentInstance = instanceId_; + if (currentInstance >= MIN_SUBCONTAINER_ID && currentInstance < MIN_PLUGIN_SUBCONTAINER_ID) { + currentInstance = SubwindowManager::GetInstance()->GetParentContainerId(currentInstance); + } + info.SetReturnValue(JSRef::Make(ToJSValue(currentInstance))); +} + void JSView::JsSetCardId(int64_t cardId) { cardId_ = cardId; @@ -1270,6 +1280,7 @@ void JSViewPartialUpdate::JSBind(BindingTarget object) JSClass::Method("syncInstanceId", &JSViewPartialUpdate::SyncInstanceId); JSClass::Method("restoreInstanceId", &JSViewPartialUpdate::RestoreInstanceId); JSClass::CustomMethod("getInstanceId", &JSViewPartialUpdate::GetInstanceId); + JSClass::CustomMethod("getMainInstanceId", &JSViewPartialUpdate::GetMainInstanceId); JSClass::Method("markStatic", &JSViewPartialUpdate::MarkStatic); JSClass::Method("finishUpdateFunc", &JSViewPartialUpdate::JsFinishUpdateFunc); JSClass::Method("setCardId", &JSViewPartialUpdate::JsSetCardId); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view.h b/frameworks/bridge/declarative_frontend/jsview/js_view.h index d3037e0f6a6a4ce9515656cccfff47733c49e81e..c2cb7bacfe6ff52eef11f96d07794460efd35714 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_view.h @@ -48,6 +48,7 @@ public: void SyncInstanceId(); void RestoreInstanceId(); void GetInstanceId(const JSCallbackInfo& info); + void GetMainInstanceId(const JSCallbackInfo& info); void FireOnShow() { diff --git a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_base.ts b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_base.ts index e9be8d1e0b8c6e49b1dcd06211527481aba4042c..ecb8afad59a06933b0b117a427b6434301e8d63d 100644 --- a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_base.ts +++ b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_base.ts @@ -199,6 +199,9 @@ abstract class PUV2ViewBase extends ViewBuildNodeBase { } public getUIContext(): object { + if (typeof globalThis.__getUIContext__ === 'function') { + return globalThis.__getUIContext__(this.nativeViewPartialUpdate.getMainInstanceId()); + } return this.nativeViewPartialUpdate.getUIContext(); } diff --git a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_native_base.d.ts b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_native_base.d.ts index a04dbc16a6f2ef4ec146cd686a1d6ff7c8d7cad8..0bb8526fa8a88878432c7a9566a202e27de3de69 100644 --- a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_native_base.d.ts +++ b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/puv2_common/puv2_view_native_base.d.ts @@ -40,6 +40,7 @@ declare class NativeViewPartialUpdate { setIsV2(isV2: boolean): void; allowReusableV2Descendant(): boolean; getInstanceId(): number; + getMainInstanceId(): number; markStatic(): void; elmtIdExists(elmtId: number): boolean; findChildByIdForPreview(viewId: number): object;