![]() |
TWebbrowser and Javascript
Hallo Leute,
FRAGE: Ich lade eine Website mit TWebbrowser in Delphi XE6. In dieser Website werden nach dem Laden Javascript Functionen ausgeführt. Jetzt hat er nach dem Documentscomplete Aufruf, die JS änderungen in der Site noch nicht fertig gemacht. Dh Wenn ich jetze die Seite parse, sind die Werte noch nicht in den HTML Text drin. Wie kann ich TWebbrowser veranlassen, dass er erst DocumentsComplete ausführt, wenn Javascript die Sache beendet hat. Zur Zeit lade ich die Site max 8 mal in der Hoffnung, dass es manchmal schneller geht und die Werte in der Seite drin sind. Das klappt auch doch sind viele unnötige Ladezyclen nötig. Weiß wer Rat? DANKE HERZLICH Walter PS: hab das hier gefunden: ![]() |
AW: TWebbrowser and Javascript
Hi
Wenn du den EmbeddedWB verwendest, kannst du per Doc2.scripts.length abfragen, wieviele Scripte geladen wurden bzw. mit folgendem Code warten, bis alle geladen sind: procedure WaitForScriptLoaded; var lComplete: Boolean; lScript: IHTMLScriptElement; begin // Warte bis die Scripts geladen wurden lComplete := FALSE; while not lComplete do begin Forms.Application.ProcessMessages; if Doc2.scripts.length >= 1 then begin lScript := Doc2.scripts.Item(0,0) as IHTMLScriptElement; if (lScript.readyState = 'complete') or (lScript.readyState = 'loaded') then begin lComplete := True; end; end; Sleep(100); end; end; Wenn du keinen EmbeddedWB hast, musst du erst das Document ermitteln. Die Abfrage kannst du um OnDocumentComplete machen. Hier solltest du folgendes machen: procedure Form.DoOnEWBDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); var lCurWebbrowser: IWebBrowser; lTopWebbrowser: IWebBrowser; begin try // Wurde das Document auch wirklich vollständig geladen ?? // DocumentComplete wird auch für die eingebetteten Frames aufgerufen !!! lCurWebbrowser := pDisp as IWebBrowser; lTopWebBrowser := (ASender as TWB).DefaultInterface; // Erst wenn das Dokument komplett geladen wurde, dann // dürfen die Aktionen durchgeführt werden if (lCurWebbrowser = lTopWebBrowser) and (FWB.ReadyState = READYSTATE_COMPLETE) then begin -> Hier kannst du dann warten |
AW: TWebbrowser and Javascript
DANKE, ich habe keinen EMbeddedWB
BESTEN DANK AUCH FÜR DEIN SCRIPT. Werde estesten. Blöde Frage (sorry): Was ist FWB? Woher die Methode ReadyState? Zitat:
Ich hab das mit dem LADEN so gelöst: (fast gleich)
Delphi-Quellcode:
und in WebBrowser1DocumentComplete(ASender, pDisp, URL); arbeite ich die SEite.
procedure TForm1.WebBrowser1DocumentCompleteFULL(ASender: TObject;
const pDisp: IDispatch; const URL: OleVariant); var CurWebrowser: IWebBrowser; TopWebBrowser: IWebBrowser; Document: OleVariant; WindowName: string; begin CurWebrowser := pDisp as IWebBrowser; TopWebBrowser := (ASender as TWebBrowser).DefaultInterface; if (CurWebrowser = TopWebBrowser) then begin WebBrowser1DocumentComplete(ASender, pDisp, URL); end else begin Document := CurWebrowser.Document; WindowName := Document.ParentWindow.Name; //ShowMessage(Format('Frame "%s" was loaded', [WindowName])); end; end; Doch da ist JS noch nicht abgearbeitet. Daher meine Frage was mit dem Zitat:
Wartet er da bis die JS gemacht ist? WOher diese Bool Variable? Nochwas: Dacht mit sleep(1000) wir alles gewartet auch das Abarbeiten der JS in der Seite. Stimmt das nicht, steht hier: Zitat:
Walter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 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-2025 by Thomas Breitkreuz