2014-01-18 6 views
1

TWebBrowser가 페이지를 다운로드하기 위해 이미 마쳤다는 것을 아는 방법? 내 문제는 다음과 같습니다. 내 페이지가 완전히 다운로드되어 표시 될 수있는 것을 알 수 없습니다.TWebBrowser가 페이지 다운로드를 완료하면 어떻게 감지합니까?

웹 브라우저에 한 페이지를 요청하고 페이지가 완전히 다운로드되었을 때만 응답을 표시하려고합니다. ..

+1

현재 페이지의 동적 특성을 감안할 때 (모든 페이지가 자체 수정 프로그램이 될 수도, 사용자의 행동이나 후에 어떤 임의의 순간에 아직 이상의 파일로 구성되어 결정 : 코드는 아래 보여줍니다 무엇

혜성/아약스 트래픽) 나는 그것이 일반적으로 가능하다고 생각하지 않는다. –

답변

3

OnDocumentComplete 이벤트를 처리해볼 수 있습니다.

사이트에서 스크립팅을 사용하여 추가 데이터를 다운로드하는 경우 페이지가 모든 스크립트 실행을 완료하기 전에 이벤트가 실행되기 때문에 employ more sophisticated methods 일 수 있습니다. 일반적으로 작업은 중단 문제처럼 보입니다. 검색하기 어려운 특정 사례를 제외하기 위해 "완전히 다운로드 됨"이라는 정의를 구체화 할 수 있습니다.

+2

프레임을 언급하지 않았다. 이들은 별도의 문서로 취급되고 주 문서가 완료된 후에로드를 시작합니다. –

+4

각 프레임은 자체 OnDocumentComplete 이벤트를 트리거 한 다음 기본 페이지에서 해당 끝의 OnDocumentComplete 이벤트를 트리거합니다. –

+0

^1 (여기에 표시됨) : http://stackoverflow.com/a/6446675/800214 – whosrdaddy

1

소스 : http://www.delphifaq.com/faq/delphi/network/f264.shtml

사실, 여러 프레임의 경우, OnDocumentComplete 해고됩니다 여러 번. 모든 프레임이이 이벤트를 발생시키는 것은 아니지만 DownloadBegin 이벤트를 발생시키는 각 프레임은 해당하는 DocumentComplete 이벤트를 발생시킵니다.

'실제 완료'를 어떻게 인식 할 수 있습니까?

OnDocumentComplete 이벤트는 DocumentComplete가 실행되는 프레임 (shdocvw)의 IDispatch 인 매개 변수 pDisp : 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;