diff --git a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp index 2ebffa5cfd878fdbfaa65bbefad9d5e0c17c48a9..94b20744fc13ac660aba98804302cd20846388b7 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp @@ -2132,7 +2132,9 @@ JSRef WebDialogEventToJSValue(const WebDialogEvent& eventInfo) obj->SetProperty("value", eventInfo.GetValue()); } obj->SetPropertyObject("result", resultObj); - + if (eventInfo.GetType() == DialogEventType::DIALOG_EVENT_BEFORE_UNLOAD) { + obj->SetProperty("isReload", eventInfo.GetIsReload()); + } return JSRef::Cast(obj); } diff --git a/frameworks/core/components/web/resource/web_client_impl.cpp b/frameworks/core/components/web/resource/web_client_impl.cpp index 66764f83209ef2a6b2238d194f41a4f7a495d248..81f5e2be6bf498438783d37d8a42276340349c07 100644 --- a/frameworks/core/components/web/resource/web_client_impl.cpp +++ b/frameworks/core/components/web/resource/web_client_impl.cpp @@ -97,12 +97,13 @@ bool OnJsCommonDialog( const std::string &url, const std::string &message, const std::string &value = "", - RefPtr task = nullptr) + RefPtr task = nullptr, + bool isReload = false) { CHECK_NULL_RETURN(task, false); bool jsResult = false; auto param = std::make_shared(url, message, value, dialogEventType, - AceType::MakeRefPtr(result)); + AceType::MakeRefPtr(result), isReload); task->PostSyncTask( [&webClientImpl, dialogEventType, ¶m, &jsResult] { if (webClientImpl == nullptr) { @@ -1425,4 +1426,14 @@ bool WebClientImpl::OnAllSslErrorRequestByJSV2(std::shared_ptr result) +{ + auto delegate = webDelegate_.Upgrade(); + CHECK_NULL_RETURN(delegate, false); + ContainerScope scope(delegate->GetInstanceId()); + return OnJsCommonDialog(this, DialogEventType::DIALOG_EVENT_BEFORE_UNLOAD, result, url, message, "", + delegate->GetTaskExecutor(), isReload); +} } // namespace OHOS::Ace diff --git a/frameworks/core/components/web/resource/web_client_impl.h b/frameworks/core/components/web/resource/web_client_impl.h index e277b06e4cd9168d0e87a93e81956e8998278947..8efa4acc26d6cc47a8256dde2bc3564d9b5a22ac 100644 --- a/frameworks/core/components/web/resource/web_client_impl.h +++ b/frameworks/core/components/web/resource/web_client_impl.h @@ -291,7 +291,7 @@ public: void OnNativeEmbedVisibilityChange(const std::string& embedId, bool visibility) override; bool CloseImageOverlaySelection() override; - + bool OnSslErrorRequestByJSV2(std::shared_ptr result, OHOS::NWeb::SslError error, const std::vector& certChainData) override; @@ -312,6 +312,9 @@ public: bool OnAllSslErrorRequestByJSV2(std::shared_ptr result, OHOS::NWeb::SslError error, const std::string& url, const std::string& originalUrl, const std::string& referrer, bool isFatalError, bool isMainFrame, const std::vector& certChainData) override; + bool OnBeforeUnloadByJSV2(const std::string& url, const std::string& message, bool isReload, + std::shared_ptr result) override; + private: std::weak_ptr webviewWeak_; WeakPtr webDelegate_; diff --git a/frameworks/core/components/web/web_event.h b/frameworks/core/components/web/web_event.h index 2ea540ffddeeb9e12266ab59fbdf69d47a1eeb14..52d103630d0f1547af001dbb7620c2d642182b7c 100644 --- a/frameworks/core/components/web/web_event.h +++ b/frameworks/core/components/web/web_event.h @@ -420,8 +420,9 @@ class ACE_EXPORT WebDialogEvent : public BaseEventInfo { public: WebDialogEvent(const std::string& url, const std::string& message, const std::string& value, - const DialogEventType& type, const RefPtr& result) - : BaseEventInfo("WebDialogEvent"), url_(url), message_(message), value_(value), type_(type), result_(result) + const DialogEventType& type, const RefPtr& result, bool isReload = false) + : BaseEventInfo("WebDialogEvent"), url_(url), message_(message), value_(value), type_(type), result_(result), + isReload_(isReload) {} ~WebDialogEvent() = default; @@ -450,12 +451,18 @@ public: return type_; } + bool GetIsReload() const + { + return isReload_; + } + private: std::string url_; std::string message_; std::string value_; DialogEventType type_; RefPtr result_; + bool isReload_; }; class ACE_EXPORT AuthResult : public AceType {