diff --git a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp index 965104bb12f..682a9eb5844 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp @@ -3535,7 +3535,7 @@ void JSWeb::BackgroundColor(const JSCallbackInfo& info) } Color backgroundColor; if (!ParseJsColor(info[0], backgroundColor)) { - return; + backgroundColor = WebModel::GetInstance()->GetDefaultBackgroundColor(); } WebModel::GetInstance()->SetBackgroundColor(backgroundColor); } diff --git a/frameworks/core/components_ng/pattern/web/web_model.h b/frameworks/core/components_ng/pattern/web/web_model.h index 7b65375e530..80594b3c05d 100644 --- a/frameworks/core/components_ng/pattern/web/web_model.h +++ b/frameworks/core/components_ng/pattern/web/web_model.h @@ -35,6 +35,7 @@ public: std::function&& setHapPathCallback, int32_t parentWebId, bool popup, RenderMode renderMode = RenderMode::ASYNC_RENDER, bool incognitoMode = false, const std::string& sharedRenderProcessToken = "") = 0; + virtual Color GetDefaultBackgroundColor() { return Color::WHITE; } virtual void SetCustomScheme(const std::string& cmdLine) = 0; virtual void SetFocusable(bool focusable) {}; virtual void SetFocusNode(bool isFocusNode) {}; diff --git a/frameworks/core/components_ng/pattern/web/web_model_ng.cpp b/frameworks/core/components_ng/pattern/web/web_model_ng.cpp index 1b6baeb6026..5af245d3a8b 100644 --- a/frameworks/core/components_ng/pattern/web/web_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/web/web_model_ng.cpp @@ -583,6 +583,13 @@ void WebModelNG::SetScreenCaptureRequestEventId(std::functionSetOnScreenCaptureRequestEvent(std::move(uiCallback)); } +Color WebModelNG::GetDefaultBackgroundColor() +{ + auto webPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); + CHECK_NULL_RETURN(webPattern, Color::WHITE); + return webPattern->GetDefaultBackgroundColor(); +} + void WebModelNG::SetBackgroundColor(Color backgroundColor) { auto webPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); diff --git a/frameworks/core/components_ng/pattern/web/web_model_ng.h b/frameworks/core/components_ng/pattern/web/web_model_ng.h index 88f6de6b977..cf27e346c5b 100644 --- a/frameworks/core/components_ng/pattern/web/web_model_ng.h +++ b/frameworks/core/components_ng/pattern/web/web_model_ng.h @@ -39,6 +39,7 @@ public: std::function&& setHapPathCallback, int32_t parentWebId, bool popup, RenderMode renderMode = RenderMode::ASYNC_RENDER, bool incognitoMode = false, const std::string& sharedRenderProcessToken = "") override; + Color GetDefaultBackgroundColor() override; void SetCustomScheme(const std::string& cmdLine) override; void SetOnCommonDialog(std::function&& jsCallback, int dialogEventType) override; void SetOnConsoleLog(std::function&& jsCallback) override; diff --git a/frameworks/core/components_ng/pattern/web/web_pattern.cpp b/frameworks/core/components_ng/pattern/web/web_pattern.cpp index d0572fd8520..3ef3ba56f07 100644 --- a/frameworks/core/components_ng/pattern/web/web_pattern.cpp +++ b/frameworks/core/components_ng/pattern/web/web_pattern.cpp @@ -2545,13 +2545,7 @@ void WebPattern::OnModifyDone() } if (!GetBackgroundColor()) { - auto darkMode = GetDarkModeValue(webData_ ? (WebDarkMode::Auto) : (WebDarkMode::Off)); - if (GetForceDarkAccessValue(false) && - (darkMode == WebDarkMode::On || ((darkMode == WebDarkMode::Auto) && (GetSystemColor() == Color::BLACK)))) { - UpdateBackgroundColorRightNow((Color::BLACK).GetValue()); - } else { - UpdateBackgroundColorRightNow((Color::WHITE).GetValue()); - } + UpdateBackgroundColorRightNow(GetDefaultBackgroundColor().GetValue()); } // Initialize events such as keyboard, focus, etc. @@ -4737,6 +4731,17 @@ void WebPattern::OnVisibleAreaChange(bool isVisible) } } +Color WebPattern::GetDefaultBackgroundColor() +{ + auto darkMode = GetDarkModeValue(webData_ ? (WebDarkMode::Auto) : (WebDarkMode::Off)); + if (GetForceDarkAccessValue(false) && + (darkMode == WebDarkMode::On || ((darkMode == WebDarkMode::Auto) && (GetSystemColor() == Color::BLACK)))) { + return Color::BLACK; + } else { + return Color::WHITE; + } +} + void WebPattern::UpdateBackgroundColorRightNow(int32_t color) { auto host = GetHost(); diff --git a/frameworks/core/components_ng/pattern/web/web_pattern.h b/frameworks/core/components_ng/pattern/web/web_pattern.h index 9cc18af45f3..71fa0eea1c9 100644 --- a/frameworks/core/components_ng/pattern/web/web_pattern.h +++ b/frameworks/core/components_ng/pattern/web/web_pattern.h @@ -204,6 +204,8 @@ public: void NotifyFillRequestFailed(int32_t errCode, const std::string& fillContent = "", bool isPopup = false) override; + Color GetDefaultBackgroundColor(); + void SetWebSrc(const std::string& webSrc) { if (webSrc_ != webSrc_) {