Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi OnDocumentComplete wird nicht mehr ausgelöst (https://www.delphipraxis.net/152063-ondocumentcomplete-wird-nicht-mehr-ausgeloest.html)

franky.f 9. Jun 2010 20:30

OnDocumentComplete wird nicht mehr ausgelöst
 
Hallo,

ich habe gerade ein Problem mit OnDocumentComplete und OnBeforeNavigate2.

Ich möchte Daten einer Website auslesen, dazu sollte sie ja fertig geladen sein.
Nun wird leider nicht immer das OnDocumentComplete der Hauptseite ausgelöst, die OnDocumentComplete-Events der Unterframes hingegen schon.
In 90% der Fälle geht alles gut, jedoch manchmal eben nicht.
In den Frames werden Ads geladen, z.B. GoogleAds.
Ich vermute, dass eines der Frames manchmal Probleme macht.

Mein Lösungsansatz war nun, in OnBeforeNavigate2 die unerwünschet URLs der Frames zu canceln und nur die gewünschte URL der eigentlichen Website durchzulassen.
Die Ad-URLs werden nun auch geblockt. Die Haupt-URL ist im Webbrowsercontrol vollständig und ohne Frameinhalte zu sehen

Im Logfile stehen dann anschliessend alle OnBeforeNavigate2-Einträge der Frames aber leider wird das OnDocumentComplete der Hauptseite, die ja nicht gecanceled wurde, nun generell nicht mehr ausgelöst.

Der OnDocumentComplete sieht so aus:
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var 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
    Append(LogFile);
    Writeln(LogFile, 'TopWebbrowser! Document is complete.');
    Writeln(LogFile, URL);
    CloseFile(LogFile);
  end
  else
  begin
    Document := CurWebrowser.Document;
    WindowName := Document.ParentWindow.Name;
    Append(LogFile);
    Writeln(LogFile, 'Frame ' + WindowName + ' is loaded.');
    Writeln(LogFile, URL);
    CloseFile(LogFile);
  end;
end;
Der OnBeforeNavigate2-Event sieht so aus:
Delphi-Quellcode:
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  Append(LogFile);
  Writeln(LogFile, 'BeforeNavigate2');
  Writeln(LogFile, 'URL: ' + URL);
  Writeln(LogFile, '<<< ------------------------------------------- BeforeNavigate2');
  CloseFile(LogFile);
    if Pos('http://www.HauptURL.de/', AnsiLowerCase(URL)) > 0 then Cancel := False
    else Cancel := True;
end;
Ich arbeite mit Delpi7 Professional, es ist IE 8 installiert.

Danke im Voraus,

Frank

Christian Seehase 9. Jun 2010 20:55

AW: OnDocumentComplete wird nicht mehr ausgelöst
 
Moin Frank,

wie wäre es denn, wenn Du mit TidHTTP (Indys) die URL lädst, dann müsstest Du alles haben, was Du brauchst.

franky.f 10. Jun 2010 08:41

AW: OnDocumentComplete wird nicht mehr ausgelöst
 
Hallo Christian und Danke erstmal.

Die Indys habe ich bisher nicht im Einsatz, aber ich denke, es ist einen Versuch wert.

Allerdings interessiert mich dennoch, warum mein bisheriger Ansatz mit dem TWebbrowser-Control nicht richtig funktioniert.
Laut Definition muss doch das OnDocumentComplete der Hauptseite immer kommen, oder?

Gruß
Frank

sirius 10. Jun 2010 08:51

AW: OnDocumentComplete wird nicht mehr ausgelöst
 
Wie sieht es denn mit onDownloadcomplete aus?

idefix2 10. Jun 2010 08:51

AW: OnDocumentComplete wird nicht mehr ausgelöst
 
Zitat:

die unerwünschet URLs der Frames zu canceln und nur die gewünschte URL der eigentlichen Website durchzulassen.
Da müsste man wissen, was intern genau passiert - möglicherweise wird dadurch die Hauptseite nie "fertig".


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz