AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi OnDocumentComplete wird nicht mehr ausgelöst
Thema durchsuchen
Ansicht
Themen-Optionen

OnDocumentComplete wird nicht mehr ausgelöst

Ein Thema von franky.f · begonnen am 9. Jun 2010 · letzter Beitrag vom 10. Jun 2010
 
franky.f

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

OnDocumentComplete wird nicht mehr ausgelöst

  Alt 9. Jun 2010, 20: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 20:44 Uhr) Grund: in meine Beschreibung hatte sich ein Fehler eingeschlichen.
  Mit Zitat antworten Zitat
 


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 19:15 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