如何检测TWebBrowser何时完成下载页面?

时间:2014-01-18 15:11:43

标签: delphi events download twebbrowser complete

如何知道TWebBrowser已经完成下载页面? 我的问题是:我无法知道我的页面何时完全下载并且可以显示...

我向网页浏览器请求一页,我只想在页面完全下载时显示响应...

2 个答案:

答案 0 :(得分:3)

您可以尝试处理OnDocumentComplete事件。

如果站点使用脚本来触发下载其他数据,则可能必须employ more sophisticated methods,因为事件将在页面完成所有脚本运行之前触发。一般来说,任务开始看起来像停止问题。您可能希望优化“完全下载”的定义,以排除某些难以检测的案例。

答案 1 :(得分:1)

来源:http://www.delphifaq.com/faq/delphi/network/f264.shtml

实际上,在多个帧的情况下,OnDocumentComplete会被多次触发。并非每个帧都会触发此事件,但触发DownloadBegin事件的每个帧都将触发相应的DocumentComplete事件。

如何真正完成'被认出来了吗?

OnDocumentComplete事件发送参数pDisp:IDispatch,它是触发DocumentComplete的帧(shdocvw)的IDispatch。顶级框架最终会触发DocumentComplete。

因此,要检查页面是否已完成下载,您需要检查pDisp是否与WebBrowser控件的IDispatch相同。

以下代码演示的内容:

procedure IForm1.WebBrowser1Documentccmplete(Sender: Iobject:
const pDisp: Inispatch; var URL: OLEvariant):
var
Curwebrowser : IWebBrowser:
IopWebBrowser: IWebBrowser:
Document : OLEvariant;
WindowName : string:
begin { TForm1.WebBrowser1DocumentComplete }
Curwebrowser := pDisp as IWebBrowser:
TopWebBrowser := (Sender as IWebBrowser).DefaultInterface;
if CurWebrowser=TopWebBrowser then
begin
ShowMessage('Document is complete.')
end
else
begin
Document := CurWebrowser.Document;
WindowName := Document.ParentWindow.Name:
ShowMessage('Frame ' + WindowName + ' is loaded.')
end:
end;