【发布时间】:2021-11-24 23:24:35
【问题描述】:
我使用 WebView2 创建与 Edge 兼容的集成浏览器。为了构建我的 webview,我添加了四个监听器,当我们调用函数 'navigate2' 时会调用它们。
m_controlsWebView->add_SourceChanged(Microsoft::WRL::Callback<ICoreWebView2SourceChangedEventHandler>(
this, &EdgeBrowser::OnWebViewSourceChanged)
.Get(), &m_sourceChangedToken);
m_controlsWebView->add_ContentLoading(Microsoft::WRL::Callback<ICoreWebView2ContentLoadingEventHandler>(
this, &EdgeBrowser::OnWebViewContentLoading)
.Get(), &m_contentLoadingToken);
m_controlsWebView->add_HistoryChanged(Microsoft::WRL::Callback<ICoreWebView2HistoryChangedEventHandler>(
this, &EdgeBrowser::OnWebViewHistoryChanged)
.Get(), &m_historyChangedToken);
m_controlsWebView->add_NavigationCompleted(Microsoft::WRL::Callback<ICoreWebView2NavigationCompletedEventHandler>(
this, &EdgeBrowser::OnWebViewNavigationCompleted)
.Get(), &m_navigationCompletedToken);
OnWebViewHistoryChanged 代码:
HRESULT EdgeBrowser::OnWebViewHistoryChanged(ICoreWebView2* sender, IUnknown* args) {
GEMLOG(InfoLevel, "HRESULT IntegratedBrowser2::OnWebViewHistoryChanged(ICoreWebView2* sender, IUnknown* args)", "OK")
return S_OK;
}
OnWebViewNavigationCompleted 的代码:
HRESULT EdgeBrowser::OnWebViewNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args) {
if (args)
{
BOOL succeedeed;
args->get_IsSuccess(&succeedeed);
if (succeedeed == FALSE)
{
COREWEBVIEW2_WEB_ERROR_STATUS error_stats;
args->get_WebErrorStatus(&error_stats);
std::wstring error = this->WebErrorStatusToString(error_stats);
std::string str_error = utils::wStringToString(error, CP_UTF8);
GEMLOG(ErrorLevel, "HRESULT EdgeBrowser::OnWebViewNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args)", str_error.c_str())
}
else
{
GEMLOG(InfoLevel, "HRESULT EdgeBrowser::OnWebViewNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args)", "OK")
}
}
return S_OK;
}
在调用 Microsoft 函数“navigate2”后,我注意到调用函数 OnWebViewHistoryChanged 和 OnWebViewNavigationCompleted 之间的延迟超过一分钟。
为什么?这种放缓的不同可能原因是什么?
04-10-2021 15:56:01 0x00002428 (InfoLevel,HRESULT EdgeBrowser::OnWebViewSourceChanged(ICoreWebView2* sender, ICoreWebView2SourceChangedEventArgs* args),) OK
04-10-2021 15:56:01 0x00002428 (InfoLevel,HRESULT EdgeBrowser::OnWebViewContentLoading(ICoreWebView2* sender, ICoreWebView2ContentLoadingEventArgs* args),) The operation completed successfully.
04-10-2021 15:56:01 0x00002428 (InfoLevel,HRESULT EdgeBrowser::OnWebViewHistoryChanged(ICoreWebView2* sender, IUnknown* args),) OK
04-10-2021 15:57:04 0x00002428 (InfoLevel,HRESULT EdgeBrowser::OnWebViewNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args),) OK
【问题讨论】: