使用TWebBrowser,而不使用idHttp等控件的原因:因为有些网站用idHttp(URL)取不到需要的网页,只有在浏览器中点击超链接才能取到正确的网页,可能是因为网页中有特殊控制造成的。
我的代码如下,不需要显示TWebBrowser控件:
在有窗口停靠的情况下没有任何问题, 因为线程中没有TForm停靠,所以总是有问题,
var
wb: TWebBrowser;
begin
wb:= TWebBrowser.Create(nil);
try
wb.Navigate('http://cn.yahoo.com/');
while wb.Busy or(wb.ReadyState<>READYSTATE_COMPLETE)do //这里wb.Busy恒为false, ReadyState恒为READYSTATE_INTERACTIVE
Application.ProcessMessages;
ShowMessage('网页开启完成'); //无法到达这里
finally
wb.Free;
end;
end;
我的代码如下,不需要显示TWebBrowser控件:
在有窗口停靠的情况下没有任何问题, 因为线程中没有TForm停靠,所以总是有问题,
var
wb: TWebBrowser;
begin
wb:= TWebBrowser.Create(nil);
try
wb.Navigate('http://cn.yahoo.com/');
while wb.Busy or(wb.ReadyState<>READYSTATE_COMPLETE)do //这里wb.Busy恒为false, ReadyState恒为READYSTATE_INTERACTIVE
Application.ProcessMessages;
ShowMessage('网页开启完成'); //无法到达这里
finally
wb.Free;
end;
end;
while的条件似乎设置的有点不合理吧。
没错,就是要while条件为true时到下一段代码,因为只有那两个条件都为true时页面加载才完成。因为下面的处理必须是加载完成后才能执行。
线程里面测试要将showMessage这行屏蔽,不然就算能执行到这一行也会出错。
在带有窗体的主线程里执行的时候是没有任何问题,但到线程中就执行不过去了