AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Frames kommen nicht an im TWebBrowser-control !
Thema durchsuchen
Ansicht
Themen-Optionen

Frames kommen nicht an im TWebBrowser-control !

Ein Thema von ArrayOf.. · begonnen am 10. Sep 2003
Antwort Antwort
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#1

Frames kommen nicht an im TWebBrowser-control !

  Alt 10. Sep 2003, 07:15
Hallo,

ich versuche gerade eine HTML-Seite, bestehend aus FrameSet und 7 Frames, aus einem RichEdit1 heraus in ein TWebBrowser-control hineinzubuxieren. Das Ganze funktioniert ja eigentlich auch, allerdings darf die HTML-Seite dann nur aus einem einzigen HTML-Document besteht. Bei einer Aufteilung in einen FrameSet und mehrer Frames klappt es dann jedoch leider nicht mehr. Eventuell gibt es ja irgendwo doch noch jemand (auf dieser ganzen großen weiten Welt *g*) , der da etwas Erfahrung hat oder sonst vielleicht eine gute Idee .

Zum Vorgehen, bzw. den jeweiligen Sequenzen:


'sendToWBrowserClick' startet die Aktion, bei der ich die jeweilige Seite dann schließlich mit der Proc 'LadeQuelltext' einlese, dh. in meinem Falle wird damit jetzt also zuerst mal das FrameSet-Document geladen. Das klappt auch so weit -- bleibt also nur die Frage offen 'wie jetzt noch die eigentlichen Frames nachschieben' (welches ich dann unten im OnBeforeNavigate2-event zu lösen versuche). Bis dahin aber zuerst nochmal kurz der übrige Code zum Überblick:

Code:
procedure TForm4.sendToWBrowserClick(Sender: TObject);
begin
  Form2.WebBrowser1.Navigate('about:blank');
  while Form2.WebBrowser1.ReadyState < readystate_interactive do Application.ProcessMessages;
  fRichEditLinePtr := -1; // Hilfsvariable zum Auslesen der richtigen Codetexte aus RichEdit1
  fCancel_Flag := true; // Flag für's OnBeforeNavigate2-event
  LadeQuelltext(Form2.WebBrowser1.Document);
end;

Diese eigentliche Lade-Routine ('LadeQuelltext') ist eine kleine Abart einer Procedure, die zum gleichen Zwecke auch aus dem SwissDelphiCenter kopiert werden kann (aber eben auch nur für Pages ohne Aufteilung in FrameSet u. Frames funktioniert)

Code:
procedure TForm4.LadeQuelltext(DocuToLoad: IDispatch);
var
  ms: TMemoryStream;
begin
  if Assigned(DocuToLoad) then
  begin
    ms := TMemoryStream.Create;
    try
      if Load_fStringList1 then
      begin
        fStringList1.SaveToStream(ms);
        ms.Seek(0, 0);
        (DocuToLoad as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      end;
    finally
      ms.Free;
    end;
  end;
end;

'And last but not least' der OnBeforeNavigate2-eventhandler des TWebBrowser-controls, der sofort nach Beendigung der obersten Routine anfängt pro im FrameSet angegebenen Frame einmal zu feuern:

Code:
procedure TForm2.WebBrowser1BeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var URLStr : string;
    docu : IDispatch;
begin
  if form4.fCancel_Flag then
  begin
    Cancel := true;
    docu := (PDisp as IWebBrowser).document;
    form4.ladeQuelltext(docu);
  end;
end;
In diesem Eventhandler wird also pro Versuch des WebBrowsers, sich einen Frame über seinen original URL zu besorgen, zuerst mal dieses gecancled und dann versuche ich selbst diesen Frame über dessen IDispatch auf die gleiche Art zu laden wie der Frameset selbst geladen wurde. Leider kommen die Frames dort dann aber irgendwie nicht so richtig an. Anstelle des eigentlichen Codetextes der Frames taucht dort dann nämlich jeweils immer nur diese folgende Zeile auf (die sonst nicht Bestandteil der jeweiligen Frame-Codes ist):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

(Das diese Zeile dort auftaucht weiß ich daher, weil ich in diesem Programm auch gleichzeitig noch eine Routine habe, mit der ich den Quellcode von angezeigten HTML-Pages auch auslesen kann – und zwar auch von solchen Pages die auf FrameSets basieren). Nehme nun an, dieses hat der WebBrowser einfach als quasi Leerframe dort installiert, als ihm meine Zusendungen warum auch immer nicht gefiel o.ä..


Also, vielleicht hat ja jemand eine Idee, wo der (womöglich nur kleine) Fehler in diesem Vorgehen liegen könnte oder aber gibt es speziell dafür sogar wieder eine gänzlichst andere Technik?

Thx schonmal fürs Durchlesen

(Edit: in this Color)
MfG

  Mit Zitat antworten Zitat
Antwort Antwort


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 11:57 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