Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использовать событие OnDocumentComplete у TWebBrowser при наличии фреймов

Delphi , Интернет и Сети , Браузер

Использовать событие OnDocumentComplete у TWebBrowser при наличии фреймов

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
 When loading a page based on different frames into webbrowser 
 control, "ONDocumentComplete" fires each time one of the frames 
 gets completed. How can I find out, when this last Point 
 is reached and get this final url? 
}

 { 
 Wenn eine Seite mit Frames in den Webbrowser geladen wird, wird 
 "OnDocumentComplete" jedesmal ausgelцst, wenn eine Frame fertig 
 geladen ist. 
 Ich benцtige bei aber ein Ereignis, nachdem alle 
 Frames geladen wurden. Aus der Hilfe geht hervor, dass dies mit dem Ereignis 
 OnDocumentComplete realisiert werden kann. 
}

 procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
   const pDisp: IDispatch; var URL: OleVariant);
 var
   CurWebrowser: IWebBrowser;
   TopWebBrowser: IWebBrowser;
   Document: OleVariant;
   WindowName: string;
 begin
   CurWebrowser := pDisp as IWebBrowser;
   TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;
   if CurWebrowser = TopWebBrowser then
     ShowMessage('Complete document was loaded')
   else
   begin
     Document := CurWebrowser.Document;
     WindowName := Document.ParentWindow.Name;
     ShowMessage(Format('Frame "%s" was loaded', [WindowName]));
   end;
 end;

Проблема заключается в том, что событие OnDocumentComplete происходит для каждого фрейма, и вы хотите знать, когда все фреймы будут загружены.

Вот возможное решение:

  1. Следите за количеством фреймов с помощью счетчика.
  2. В обработчике события OnDocumentComplete, увеличьте счетчик каждый раз, когда фрейм будет загружен.
  3. Когда счетчик достигнет 0, это означает, что все фреймы были загружены, и вы можете запустить свой финальный шаг.

Вот обновленный код:

var
  FrameCount: Integer;
  FrameLoaded: Boolean;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  Inc(FrameCount);
  if FrameCount > 0 then
    FrameLoaded := True
  else
    FrameLoaded := False;

  // Проверьте, были ли все фреймы загружены
  if FrameLoaded then
  begin
    ShowMessage('Все фреймы были загружены');
    // Запустите свой финальный шаг здесь
  end;
end;

В этом коде FrameCount инициализируется в 0 и увеличивается каждый раз, когда фрейм будет загружен. Переменная FrameLoaded устанавливается в True, если все фреймы были загружены.

Обратите внимание, что вам может потребоваться изменить логику в зависимости от вашей конкретной задачи.

Альтернативное решение - использовать метод GetMainFrame интерфейса IWebBrowser2, чтобы получить основной фрейм и проверить его состояние readyState. Если оно равно READYSTATE_COMPLETE, то все фреймы были загружены. Вот пример:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
  MainFrame: IHTMLWindow2;
begin
  MainFrame := (Sender as TWebBrowser).DefaultInterface as IWebBrowser2).GetMainFrame;
  if MainFrame.ReadyState = READYSTATE_COMPLETE then
    ShowMessage('Все фреймы были загружены');
end;

Эта APPROACH более проста, но она требует ссылки на интерфейс IWebBrowser2.

Когда страница с рамками загружается в контроле TWebBrowser, событие OnDocumentComplete происходит каждый раз, когда загружается одна из рамок, и для определения момента, когда это последнее событие произошло, можно использовать переменную URL, которая бу


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:25:15/0.0039279460906982/0