Hallo,
ich stehe vor einem (für mich) bisher nicht lösbaren Problem.
Ich habe ein Programm, welches den Quelltext des Browser auswertet (u.a. mit regulären Ausrücken). Um auch zukünftig eine gewisse Kompatibilität zu erhalten, möchte ich von CES1 auf CES3 wechseln. Grundsätzlich funktioniert das auch ganz gut. Lediglich der Quelltext der Webseite wird nicht richtig ausgelesen.
Bei CES1 konnte ich den Quelltext simpel mit "getsource" in einem String speichern. Bei CEF3 funktioniert das über eine Callbackfunktion.
Um das Programm fortzuführen (z.B. um zu entscheiden, ob eine Webseite weiter gescrollt werden muss oder nicht) muss der Quelltext untersucht werden. Jetzt ist es aber so, dass die Callbackfunktion nicht aufgerufen wird, wenn ich mit dem Hauptprogramm mit einer Repeat - Application.processmessage Schleife auf die Callbackfunktion warte. Wenn ich auf eine Auswertung des Quelltextes verzichte, und die Bearbeitung nach Quelltexterhebung unterbreche, wir die Callbackfunktion sofort aufgerufen.
Die Repeat schleife scheint also das Aufrufen der Callbackfuntkion zu verhindern.
Hier mein Code:
Delphi-Quellcode:
procedure HTMLSourceCallback(const str: ustring);
begin
//str is the SourceHtml
FBrowserSource := str;
FBrowserGetSourceBusy := False;
end;
Delphi-Quellcode:
function TBrowserCES3.GetSource: string;
begin
FBrowserSource := '';
FBrowserGetSourceBusy := true;
FBrowser.Browser.MainFrame.GetSource(TCefFastStringVisitor.Create(HTMLSourceCallback));
repeat
application.ProcessMessages;
sleep(10);
until FBrowserGetSourceBusy = False;
Result := FBrowserSource;
end;
Kann ich CEF3 irgendwie dazu bringen, auch innerhalb der Repeatschleife weiterzuarbeiten und die Callbackfunktion aufzurufen? Oder habe ich einen Denkfehler?
Schon mal Danke
Benno