Mega Code Archive

 
Categories / Delphi / Examples
 

Twebbrowser determine when a page with frames is completed

Question: If I load a web page with TWebBrowser that contains frames then the OnDocumentComplete() is hit for each frame. How can I recognize that the page is completely loaded (no more frames missing)? Answer: Indeed, in case of multiple frames, OnDocumentComplete gets fired multiple times. Not every frame fires this event, but each frame that fires a DownloadBegin event will fire a corresponding DocumentComplete event. How can the 'real completion' be recognized? The OnDocumentComplete event sends parameter pDisp: IDispatch, which is the IDispatch of the frame (shdocvw) for which DocumentComplete is fired. The top-level frame fires the DocumentComplete in the end. So, to check if a page is done downloading, you need to check if pDisp is same as the IDispatch of the WebBrowser control. That's what the code below demonstrates. procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OLEvariant); var CurWebrowser : IWebBrowser; TopWebBrowser: IWebBrowser; Document : OLEvariant; WindowName : string; begin { TForm1.WebBrowser1DocumentComplete } CurWebrowser := pDisp as IWebBrowser; TopWebBrowser := (Sender as TWebBrowser).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;