如何知道TWebBrowser已经完成下载页面? 我的问题是:我无法知道我的页面何时完全下载并且可以显示...
我向网页浏览器请求一页,我只想在页面完全下载时显示响应...
答案 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;