Nei*_*ir0 56 c# webbrowser-control winforms
如何检测System.Windows.Forms.WebBrowser控件何时完成加载?
我尝试使用Navigate和DocumentCompleted事件,但在文档加载期间它们都被引发了几次!
Pau*_* pk 35
我认为该DocumentCompleted事件将被加载所有加载的子文档(例如JS和CSS).你可以看一下WebBrowserDocumentCompletedEventArgs在DocumentCompleted和查询的网址财产和比较,为主页的网址.
Kyl*_*ndo 29
我做了以下事情:
void BrowserDocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
return;
//The page is finished loading
}
Run Code Online (Sandbox Code Playgroud)
加载的最后一页往往是导航到的页面,所以这应该有效.
从这里开始.
ePa*_*dit 17
以下应该有效.
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//Check if page is fully loaded or not
if (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
else
//Action to be taken on page loading completion
}
Run Code Online (Sandbox Code Playgroud)
She*_* 蒋晟 13
请注意,由于服务器传输或网址规范化,DocumentCompleted中的网址可能与导航网址不同(例如,您导航到www.microsoft.com并在documentcomplete中获得http://www.microsoft.com)
在没有框架的页面中,此事件在加载完成后触发一次.在具有多个框架的页面中,此事件针对每个导航框架触发(框架内支持注释导航,例如,单击框架中的链接可将框架导航到另一个页面).最高级别的导航框架(可能是也可能不是顶级浏览器)会触发最终的DocumentComplete事件.
在本机代码中,您将比较DocumentComplete事件的发送者,以确定事件是否是导航中的最终事件.但是,在Windows窗体中,发送者参数不包含在WebBrowserDocumentCompletedEventArgs中.您可以接收本机事件以获取参数的值,或者检查浏览器的readystate属性或DocumentCompleted事件处理程序中的框架文档,以查看是否所有帧都处于就绪状态.
使用readystate方法存在一个问题,就好像存在下载管理器并且导航是可下载文件一样,导航可以被下载管理器取消,并且就绪状态将不会完成.
小智 5
我遇到了多个DocumentCompleted触发事件的相同问题,并尝试了上述所有建议。最后,似乎在我的情况下,IsBusy属性和Url属性都不起作用,但这ReadyState似乎是我所需要的,因为它在加载多个帧时具有“交互式”状态,并且只有在加载最后一个帧后才获得“完成”状态. 因此,我知道页面何时完全加载了其所有组件。
我希望这也可以帮助其他人:)