WebView2 - 调用函数"navigate2"后,等待时间太长



我使用WebView2创建一个与Edge兼容的集成浏览器。为了构建我的网络视图,我添加了四个监听器,当我们调用函数"navigation2"时,它们会被调用。

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函数"navigation2"后,我注意到调用函数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

在引发DOMbody.onload事件之后引发CoreWebView2.NavigationCompleted事件。由于此事件等待HTML文档中的所有子下载完成,包括所有图像、子帧等,因此这种情况可能会在很久以后发生

或者,您可以考虑使用DOMdocument.DOMContentLoaded事件引发的CoreWebView2.DOMContentLoaded事件,该事件在解析DOM后引发,并且不等待子下载完成。

最新更新