wxWebViewEdge: Improve wxEVT_WEBVIEW_LOADED
Previously the edge event ContentLoading was used which was triggered earlier than DOMContentLoaded. This event wasn't available in earlier SDK versions. Minimum required SDK version is now: 1.0.705.50 (Released 2021-01-25) Fixes #19202 See https://github.com/wxWidgets/wxWidgets/pull/2468
This commit is contained in:
committed by
Vadim Zeitlin
parent
6f372ad18a
commit
a756ed93c2
@@ -15,8 +15,8 @@
|
||||
|
||||
#include <WebView2.h>
|
||||
|
||||
#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<ICoreWebView2Environment> m_webViewEnvironment;
|
||||
wxCOMPtr<ICoreWebView2> m_webView;
|
||||
wxCOMPtr<ICoreWebView2_2> m_webView;
|
||||
wxCOMPtr<ICoreWebView2Controller> 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);
|
||||
|
@@ -348,7 +348,7 @@ public:
|
||||
- With CMake just enable @c wxUSE_WEBVIEW_EDGE
|
||||
- When not using CMake:
|
||||
- Download the <a href="https://aka.ms/webviewnuget">WebView2 SDK</a>
|
||||
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)
|
||||
|
@@ -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<ICoreWebView2> 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<ICoreWebView2DocumentTitleChangedEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnDocumentTitleChanged).Get(),
|
||||
&m_documentTitleChangedToken);
|
||||
m_webView->add_ContentLoading(
|
||||
Callback<ICoreWebView2ContentLoadingEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnContentLoading).Get(),
|
||||
&m_contentLoadingToken);
|
||||
m_webView->add_DOMContentLoaded(
|
||||
Callback<ICoreWebView2DOMContentLoadedEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnDOMContentLoaded).Get(),
|
||||
&m_DOMContentLoadedToken);
|
||||
m_webView->add_ContainsFullScreenElementChanged(
|
||||
Callback<ICoreWebView2ContainsFullScreenElementChangedEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnContainsFullScreenElementChanged).Get(),
|
||||
|
Reference in New Issue
Block a user