Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Окончание загрузки страницы в WebBrowser


Автор: Vladimir_K 19.1.2008, 23:42
Для проверки начала загрузки страницы в WebBrowser использую свойство OnDownloadBegin, а для окончания загрузки страницы - свойство OnDownloadComplete, но оно срабатывает раньше, чем страница загружается полностью, со всеми картинками и пр.
Есть ли альтернативный способ проследить полную загрузку?

Автор: VICTAR 19.1.2008, 23:45
OnDocumentComplete?

Автор: LEE_ROY 20.1.2008, 01:48
Цитата(VICTAR @ 19.1.2008,  23:45)
OnDocumentComplete?

+ OnNavigateComplete

Автор: VoV_I_K 20.1.2008, 16:09
Народ! А ведь встроенную справку в делфи еще никто не отменял да?

This example shows how to detect when a document is completely loaded, even if it includes multiple frames. Only the final OnDocumentComplete event passes the same Dispatch interface as the OnNavigateComplete event handler.

Код

var

  CurDispatch: IDispatch; {save the interface globally }

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);

begin
  if CurDispatch = nil then
    CurDispatch := pDisp; { save for comparison }
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    Beep; {the document is loaded, not just a frame }
    CurDispatch := nil; {clear the global variable }
  end;
end;

Автор: mmvds 20.1.2008, 18:44
Насколько я знаю у данных свойств проблемы с IE7, поэтому использую сторонний компонент EmbeddedWB, кстати в нем гораздо больше возможностей чем в WebBrowser.

Автор: Vladimir_K 20.1.2008, 18:57
VoV_I_K, а в какую из этих процедур мне вставлять свои команды, которые должны выполняться по окончании загрузки?
Сейчас попробовал, вроде бы сюда: procedure TForm1.WebBrowser1DocumentComplete, если условие выполняется. Или не так?

Автор: VoV_I_K 20.1.2008, 19:38
Что бы не возникало больше вапросов обьясню!
NavigateComplete2 возникает когда приходит первая порция данных с сервера
pDisp хранит ссылку на интрерфейс главное страницы...т.е. той в которую могут быть вложены фреймы
DocumentComplete срабатывает каждый раз при окончании загрузки документа(фрейма)
Мы просто проверяем в каждом DocumentComplete , какой документт окончил загрузку и если это документ который был первым-главным, то все ОК!!! страницы  загружена полностью

Для тех кому лень читать! 
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    Beep; {the document is loaded, not just a frame }
    CurDispatch := nil; {clear the global variable }
ВОТ СЮДА НАДО ВСТАВЛЯТЬ 
  end;
end;

И действительно юзай EmbeddedWB!!! он реально лучше

Автор: Vladimir_K 20.1.2008, 22:05
Спасибо огромное всем! Вопрос решен. smile 
По крайней мере:
1. этот вопрос,
2. на сегодня.
 smile 

Автор: MadCoder 23.6.2008, 12:44
По-моему, это решается так:
Код

  while WebBrowser1.ReadyState<>4 do
  Application.ProcessMessages;
// Тут пиши, что будет после загрузки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)