Einzelnen Beitrag anzeigen

franky.f

Registriert seit: 29. Jul 2008
8 Beiträge
 
#1

OnDocumentComplete wird nicht mehr ausgelöst

  Alt 9. Jun 2010, 21:30
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

Geändert von franky.f ( 9. Jun 2010 um 21:44 Uhr) Grund: in meine Beschreibung hatte sich ein Fehler eingeschlichen.
  Mit Zitat antworten Zitat