2014-01-18 5 views
1

Как узнать, что TWebBrowser уже завершен, чтобы загрузить страницу? Моя проблема: я не знаю, когда моя страница была полностью загружена, и это может быть показано ...Как определить, когда TWebBrowser закончит загрузку страницы?

Я прошу одну страницу на свой веб-браузер и хочу показать ответ только в том случае, если страница была полностью загружена. ..

+1

Учитывая динамическую природу страниц сегодня (любая страница может быть самомодифицирующейся программой, решение состоит из еще более файлов в любой случайной минуте после любых действий пользователя или comet/ajax) Я не думаю, что это возможно в общем смысле –

ответ

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 отправляет параметр pDisp: IDispatch, который является IDispatch фрейма (shdocvw), для которого запускается DocumentComplete. Кадр верхнего уровня запускает DocumentComplete в конце.

Итак, чтобы проверить, была ли загружена страница, вам нужно проверить, является ли pDisp такой же, как IDispatch элемента управления WebBrowser.

Вот что ниже код демонстрирует:

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; 
Смежные вопросы