Delphi中WebBrowser判断页面及JS是否加载完成

时间很完了,但问题总算解决了。

在一个程序中需要判断WebBrowser打开的页面是否加载完成,通常的做完是使用Busy属性,代码如下:

while WebBrowser1.Busy do

Application.ProcessMessages;

这个访问对于访问纯Html的页面时是一点儿问题都没有的,但有些页面在设计时为了不影响打开速度,是让html代码优先显示,然后再运行js代码或框架代码,由于我要访问的页面中没有调用框架页面,所以没作测试。

经过一夜的摸索,最终找到了解决办法:

procedure TForm1.wb1ProgressChange(Sender: TObject; Progress,

ProgressMax: Integer);

begin

//判断页面及JS是否执行完毕

if ( Progress = 0 ) and ( ProgressMax = 0 ) and

( OldProgress = -1 ) then

begin

IsWebLoadComplete := True;

end;

OldProgress := Progress;

end;

在此之前我对ProgressChange事件参数中的值进行了跟踪,发现当前进度的值和总进度的值相等后并不一定代表页面全部加载完成,但页面在加载完成后,Progress和ProgressMax的后两个值却总是-1/1000000和0/0。Progress的值为-1,有可能是页面全部加载完成了,但也有可能是只加载完了需要访问的其中一个页面文件。

经过多次测试,当-1/1000000和0/0接连出现时,就可以保证页面已经全部加载完成了。