WinForms Microsoft.Web.WebView2 导航,页面已完全加载

Posted

技术标签:

【中文标题】WinForms Microsoft.Web.WebView2 导航,页面已完全加载【英文标题】:WinForms Microsoft.Web.WebView2 Navigate, Page Fully Loaded 【发布时间】:2021-05-09 04:01:12 【问题描述】:

我正在尝试在 this.webViewBrowser.CoreWebView2.Navigate(url) 操作之后执行一个方法。

由于页面未完全加载且动态脚本未执行,目前仍失败。

Microsoft.Web.WebView2 Nuget 包是 v1.0.781-prerelease。

亲切的问候,

尼尔

【问题讨论】:

因为页面没有完全加载,动态脚本被执行。 → 这基本上意味着你需要等待一下。没有这样的事件来检测这些动态内容加载脚本何时完成。他们可能会不断工作以刷新页面中的某些信息。 【参考方案1】:

因为页面没有完全加载和动态脚本执行。 → 这基本上意味着你需要等待一下。没有这样的事件来检测这些动态内容加载脚本何时完成。他们可能会不断工作以刷新页面中的某些信息。

作为一般答案,对于那些正在寻找加载事件的人,有两个事件可以帮助您检测加载事件:

WebView2.NavigationCompleted → 在 WebView 完全加载(body.onload 已被提升)或加载因错误停止时引发。 WebView2.CoreWebView2.DOMContentLoaded → 在解析初始 html 文档时引发。这与 html 中文档的 DOMContentLoaded 事件一致。 (这个从 1.0.705.50 开始可用。)

但请记住,如果您有一个执行一些 ajax 请求的页面(当文档准备好时),我认为很明显上述事件会在您看到所有内容之前引发。在这些情况下,您只需在引发事件后稍等片刻即可。

【讨论】:

如果像 Reza 说您需要执行 ajax 请求或其他异步工作,您还可以使用 WebView2.WebMessageReceived 事件将通知从脚本发送到本机代码。还有 WebView2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync 方法,该方法将确保在页面被解析和任何页面脚本运行之前将提供的脚本注入到您导航到的每个页面中。 谢谢 Reza,是的,我目前正在使用 NavigationCompleted 事件并且触发得太早了。不理想,但必须使用计时器,因为我不知道确定的选项。 没问题。这样做:await Task.Delay(3000); DoSomething();.

以上是关于WinForms Microsoft.Web.WebView2 导航,页面已完全加载的主要内容,如果未能解决你的问题,请参考以下文章

Web 开发人员迁移到 Winforms

Winforms 中的 WPF 事件

WinForms中的WPF控件[关闭]

Winforms:创建动态时间线控件

如何让 WinForms 停止默默地忽略未处理的异常?

Easycomplete Datagridviewcombobox 列 winforms