繁体   English   中英

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

[英]How do I detect when TWebBrowser finishes downloading a page?

如何知道 TWebBrowser 是否已经完成下载页面? 我的问题是:我不知道我的页面何时完全下载,以便可以显示。

我向我的网络浏览器请求一个页面,我想仅在页面完全下载后才显示响应。

您可以尝试处理OnDocumentComplete事件。

如果站点使用脚本来触发额外数据的下载,您可能必须采用更复杂的方法,因为该事件将在页面完成其所有脚本运行之前触发。 一般来说,任务开始看起来像停机问题。 您可能希望改进“完全下载”的定义以排除某些难以检测的情况。

来源: 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM