AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Chromium CEF3 DLL "blockiert"

Chromium CEF3 DLL "blockiert"

Ein Thema von bekrause · begonnen am 6. Jul 2016 · letzter Beitrag vom 6. Jul 2016
Antwort Antwort
bekrause

Registriert seit: 31. Mär 2003
Ort: Essen
20 Beiträge
 
Delphi XE Professional
 
#1

Chromium CEF3 DLL "blockiert"

  Alt 6. Jul 2016, 14:06
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
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.552 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Chromium CEF3 DLL "blockiert"

  Alt 6. Jul 2016, 14:28
Ich vermute das liegt daran, dass das ganze in Threads läuft. Vielleicht blockierst du mit der Schleife eine Synchronisierung mit dem Hauptthread, so dass ein Thread darauf wartet das Ergebnis abzuliefern.

Das Polling ist aber ohnehin keine gute Idee. Du solltest deinen Quelltext besser so umbauen, dass er korrekt auf den Callback reagiert und die Verarbeitung dort macht.
Unter Android und iOS wird diese Arbeitsweise noch viel stärker forciert. Eben weil das die GUI in aller Regel deutlich responsiver macht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
bekrause

Registriert seit: 31. Mär 2003
Ort: Essen
20 Beiträge
 
Delphi XE Professional
 
#3

AW: Chromium CEF3 DLL "blockiert"

  Alt 6. Jul 2016, 15:40
Danke erstmal für Deine Info.
Ich habe jetzt folgendes herausgefunden. Das Verfahren von mir funktioniert bei einigen Webseiten. So wird der Quelltext von Facebook, vor der Benutzeranmeldung angezeigt, nach der Benutzeranmeldung bleibt das Programm in der Daueschleife Hängen.
Sehr ominös.

Gruß Benno
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf