![]() |
Warten bis der TWebBrowser fertig geladen hat?
Hallo
Wie kann man zuverlässig feststellen, ob ein TWebBrowser fertig geladen hat? 1. Wenn Wait() von der ![]() kann die Applikation unter Umständen nicht mehr beendet werden, da der Browser den ReadyState = READYSTATE_COMPLETE nicht in jedem Fall erreicht. Test:
Delphi-Quellcode:
Dabei werden folgende Ereignisse nacheinander ausgelöst:
Webbrowser1.Navigate('http://www.microsoft.com/surface/');
Wait(Webbrowser1); ShowMessage('mich wirst du nie sehen!'); 20:26:28 : OnBeforeNavigate2 (1) 20:26:28 : OnDownloadBegin (1) 20:26:28 : OnDownloadComplete (1) 20:26:28 : OnDownloadBegin (2) 20:26:29 : OnNavigateComplete2 (1) 20:26:29 : OnBeforeNavigate2 (2) 20:26:29 : OnNavigateComplete2 (2) 20:26:29 : OnDownloadComplete (2) 20:26:29 : OnDocumentComplete (Frame wtPage geladen ) 20:26:30 : OnDocumentComplete (komplettes Dokument geladen) 20:26:30 : OnBeforeNavigate2 (3) 20:26:30 : OnDownloadBegin (3) 20:26:30 : OnDownloadComplete (3) 20:26:30 : OnDownloadBegin (4) 20:26:30 : OnDownloadComplete (4) Auch der andere Ansatz von der Codlib von mir (Vergleich CurWebrowser = TopWebBrowser) bringt nicht das gewünschte Ergebnis, da nach "OnDocumentComplete (komplettes Dokument geladen)" nochmals OnBeforeNavigate2 etc aufgerufen werden. Dann gibt es noch die Möglichkeit, die obige Wait Procedure mit einem TimeOut zu erweitern, was nicht mehr dazu führt, dass die Anwendung nicht mehr beendet werden kann.
Delphi-Quellcode:
Vielleicht hat ja jemand noch weitere Vorschläge?
function WaitForBrowser(WB: TWebbrowser; TimeOut: Integer = 8000): Boolean;
var StartTime, EndTime: DWORD; begin Result := False; StartTime := GetTickCount; repeat Application.ProcessMessages; EndTime := GetTickCount; until (WB.ReadyState = READYSTATE_COMPLETE) or (Application.Terminated) or (EndTime - StartTime > TimeOut); Result := WB.ReadyState = READYSTATE_COMPLETE; end; |
Re: Warten bis der TWebBrowser fertig geladen hat?
Schau mal hier:
![]() Und so sollte das eigentlich immer korrekt funktionieren, auch wenn das Dokument aus Frames besteht. // EDIT: Sorry nicht richtig gelesen... Ich hätte gedacht, dass OnDocumentComplete korrekt funktioniert nach der beschriebenen Vorgehensweise. Hast du eine Seite als Beispiel wo das nicht funktioniert? |
Re: Warten bis der TWebBrowser fertig geladen hat?
Zitat:
(DefaultInterface = pDisp berücksichtigt bei Frames) |
Re: Warten bis der TWebBrowser fertig geladen hat?
Kann es sein, dass auf der Seite etwas per Skript passiert? Ich probiere es einmal aus.
Bisher hatte ich jedenfalls noch nie das Problem, dass der Quelltext einer Seite danach noch nicht komplett war. |
Re: Warten bis der TWebBrowser fertig geladen hat?
Zitat:
Auch auf der CNN.com Seite werden nach dem "OnDocumentComplete (komplettes Dokument geladen)" weitere Ereignisse ausgelöst. Zitat:
|
Re: Warten bis der TWebBrowser fertig geladen hat?
Du siehst aber an den Adressen, dass danach noch Skripts ausgeführt werden, die dazu dienen die Werbung anzuzeigen.
![]() Die Seite an sich war aber bereits fertig. Ob danach noch Skripts laufen, die dann irgendwann noch Änderungen an der Seite vornehmen kann man glaube ich nicht so einfach feststellen. Aber ich kann schauen, ob das geht, wenn du das brauchst. |
Re: Warten bis der TWebBrowser fertig geladen hat?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz