diff --git a/include/wx/msw/private/webview_edge.h b/include/wx/msw/private/webview_edge.h index e771848fdc..f2581fbeea 100644 --- a/include/wx/msw/private/webview_edge.h +++ b/include/wx/msw/private/webview_edge.h @@ -15,8 +15,8 @@ #include -#ifndef __ICoreWebView2Environment_INTERFACE_DEFINED__ - #error "WebView2 SDK version 0.9.430 or newer is required" +#ifndef __ICoreWebView2_2_INTERFACE_DEFINED__ + #error "WebView2 SDK version 1.0.705.50 or newer is required" #endif #ifndef __VISUALC__ @@ -47,7 +47,7 @@ public: wxWebViewEdge* m_ctrl; wxCOMPtr m_webViewEnvironment; - wxCOMPtr m_webView; + wxCOMPtr m_webView; wxCOMPtr m_webViewController; bool m_initialized; @@ -66,7 +66,7 @@ public: EventRegistrationToken m_navigationCompletedToken = { }; EventRegistrationToken m_newWindowRequestedToken = { }; EventRegistrationToken m_documentTitleChangedToken = { }; - EventRegistrationToken m_contentLoadingToken = { }; + EventRegistrationToken m_DOMContentLoadedToken = { }; EventRegistrationToken m_containsFullScreenElementChangedToken = { }; EventRegistrationToken m_webMessageReceivedToken = { }; @@ -76,7 +76,7 @@ public: HRESULT OnNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args); HRESULT OnNewWindowRequested(ICoreWebView2* sender, ICoreWebView2NewWindowRequestedEventArgs* args); HRESULT OnDocumentTitleChanged(ICoreWebView2* sender, IUnknown* args); - HRESULT OnContentLoading(ICoreWebView2* sender, ICoreWebView2ContentLoadingEventArgs* args); + HRESULT OnDOMContentLoaded(ICoreWebView2* sender, ICoreWebView2DOMContentLoadedEventArgs* args); HRESULT OnContainsFullScreenElementChanged(ICoreWebView2* sender, IUnknown* args); HRESULT OnWebMessageReceived(ICoreWebView2* sender, ICoreWebView2WebMessageReceivedEventArgs* args); HRESULT OnAddScriptToExecuteOnDocumentedCreatedCompleted(HRESULT errorCode, LPCWSTR id); diff --git a/interface/wx/webview.h b/interface/wx/webview.h index e42135cc0c..d08d8bc30e 100644 --- a/interface/wx/webview.h +++ b/interface/wx/webview.h @@ -348,7 +348,7 @@ public: - With CMake just enable @c wxUSE_WEBVIEW_EDGE - When not using CMake: - Download the WebView2 SDK - nuget package (Version 1.0.622.22 or newer) + nuget package (Version 1.0.705.50 or newer) - Extract the package (it's a zip archive) to @c wxWidgets/3rdparty/webview2 (you should have @c 3rdparty/webview2/build/native/include/WebView2.h file after unpacking it) diff --git a/src/msw/webview_edge.cpp b/src/msw/webview_edge.cpp index 73d27e16aa..ba213385ec 100644 --- a/src/msw/webview_edge.cpp +++ b/src/msw/webview_edge.cpp @@ -74,7 +74,7 @@ wxWebViewEdgeImpl::~wxWebViewEdgeImpl() m_webView->remove_NavigationStarting(m_navigationStartingToken); m_webView->remove_NewWindowRequested(m_newWindowRequestedToken); m_webView->remove_DocumentTitleChanged(m_documentTitleChangedToken); - m_webView->remove_ContentLoading(m_contentLoadingToken); + m_webView->remove_DOMContentLoaded(m_DOMContentLoadedToken); m_webView->remove_ContainsFullScreenElementChanged(m_containsFullScreenElementChangedToken); m_webView->remove_WebMessageReceived(m_webMessageReceivedToken); } @@ -203,7 +203,7 @@ HRESULT wxWebViewEdgeImpl::OnSourceChanged(ICoreWebView2 * WXUNUSED(sender), ICo event.SetEventObject(m_ctrl); m_ctrl->HandleWindowEvent(event); OnNavigationCompleted(NULL, NULL); - OnContentLoading(NULL, NULL); + OnDOMContentLoaded(NULL, NULL); } return S_OK; } @@ -309,7 +309,7 @@ HRESULT wxWebViewEdgeImpl::OnDocumentTitleChanged(ICoreWebView2* WXUNUSED(sender return S_OK; } -HRESULT wxWebViewEdgeImpl::OnContentLoading(ICoreWebView2* WXUNUSED(sender), ICoreWebView2ContentLoadingEventArgs* WXUNUSED(args)) +HRESULT wxWebViewEdgeImpl::OnDOMContentLoaded(ICoreWebView2* WXUNUSED(sender), ICoreWebView2DOMContentLoadedEventArgs* WXUNUSED(args)) { wxWebViewEvent event(wxEVT_WEBVIEW_LOADED, m_ctrl->GetId(), m_ctrl->GetCurrentURL(), ""); @@ -373,12 +373,20 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control return result; } - HRESULT hr = webViewController->get_CoreWebView2(&m_webView); + wxCOMPtr baseWebView; + HRESULT hr = webViewController->get_CoreWebView2(&baseWebView); if (FAILED(hr)) { wxLogApiError("WebView2::WebViewCreated (get_CoreWebView2)", hr); return result; } + hr = baseWebView->QueryInterface(IID_PPV_ARGS(&m_webView)); + if (FAILED(hr)) + { + wxLogApiError("WebView2::WebViewCreated (QueryInterface)", hr); + return result; + } + m_webViewController = webViewController; m_initialized = true; @@ -406,10 +414,10 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control Callback( this, &wxWebViewEdgeImpl::OnDocumentTitleChanged).Get(), &m_documentTitleChangedToken); - m_webView->add_ContentLoading( - Callback( - this, &wxWebViewEdgeImpl::OnContentLoading).Get(), - &m_contentLoadingToken); + m_webView->add_DOMContentLoaded( + Callback( + this, &wxWebViewEdgeImpl::OnDOMContentLoaded).Get(), + &m_DOMContentLoadedToken); m_webView->add_ContainsFullScreenElementChanged( Callback( this, &wxWebViewEdgeImpl::OnContainsFullScreenElementChanged).Get(),