怎么判断webbrowser能否打开网页
2个回答
2016-10-25 · 知道合伙人软件行家
关注
展开全部
一、通过DocumentCompleted 事件
每一次网页完成之后都后发送DocumentCompleted 事件,但是拥有多个frame时,浏览器就会发送多个DocumentCompleted事件,所以到最后也无法最终判断网页最终什么时候加载完成。
二、通过webBrowser.ReadyState
通过每一次读取webBrowser.ReadyState,如同上前面所列的一样,每一次DocumentCompleted完成之事都会置ReadyState为Complete ,所以还是无法准确判断网页是否完成准确的判断。
三、通过webBrowser.IsBusy,有的人甚至在此基础上判断什么URL或者加Timer等等,程序复杂,效果也不太理想。我想能不能通过多个简单的方法,准确的判断网页否加载完成呢?
下面看看我的代码:
private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();//转让控制权
}
return;
}
主要的函数:
private bool WaitWebPageLoad()
{
int i=0;
string sUrl;
while (true)
{
Delay(50); //系统延迟50毫秒,够少了吧!
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
{
if (!webBrowser1.IsBusy) //再判断是浏览器是否繁忙
{
i = i + 1;
if (i == 2)
{
sUrl = webBrowser1.Url.ToString();
if (sUrl.Contains("res")) //这是判断没有网络的情况下
{
return false;
}
else
{
return true;
}
}
continue;
}
i=0;
}
}
}
每一次网页完成之后都后发送DocumentCompleted 事件,但是拥有多个frame时,浏览器就会发送多个DocumentCompleted事件,所以到最后也无法最终判断网页最终什么时候加载完成。
二、通过webBrowser.ReadyState
通过每一次读取webBrowser.ReadyState,如同上前面所列的一样,每一次DocumentCompleted完成之事都会置ReadyState为Complete ,所以还是无法准确判断网页是否完成准确的判断。
三、通过webBrowser.IsBusy,有的人甚至在此基础上判断什么URL或者加Timer等等,程序复杂,效果也不太理想。我想能不能通过多个简单的方法,准确的判断网页否加载完成呢?
下面看看我的代码:
private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();//转让控制权
}
return;
}
主要的函数:
private bool WaitWebPageLoad()
{
int i=0;
string sUrl;
while (true)
{
Delay(50); //系统延迟50毫秒,够少了吧!
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
{
if (!webBrowser1.IsBusy) //再判断是浏览器是否繁忙
{
i = i + 1;
if (i == 2)
{
sUrl = webBrowser1.Url.ToString();
if (sUrl.Contains("res")) //这是判断没有网络的情况下
{
return false;
}
else
{
return true;
}
}
continue;
}
i=0;
}
}
}
展开全部
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw; type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure WebBrowser1DownloadBegin(Sender: TObject); procedure WebBrowser1DownloadComplete(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin form1.WebBrowser1.Navigate('www.ivytc.com'); end; procedure TForm1.WebBrowser1DownloadBegin(Sender: TObject); begin edit1.Text :='开始'; end; procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject); begin edit1.Text :='完成打开'; end; end.
回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !
回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询