Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Quelltext filtern (https://www.delphipraxis.net/21543-quelltext-filtern.html)

SleepyMaster 4. Mai 2004 16:41


Quelltext filtern
 
Hi ihrs!

Ist es möglich den Quelltext einer Seite runterzuladen (TWebbrowser) und bevor diese dargestellt wird, ihren Quelltext zu modifizieren? (Ohne dabei eine Datei auf der Festplatte anzulegen)

Vielen Dank schon mal

Luckie 4. Mai 2004 16:53

Re: Quelltext filtern
 
Ich denke nicht. Wie stellst du dir das vor? Wo willst du sie denn ändern, wenn nicht als Datei auf der Festplatte.

SleepyMaster 4. Mai 2004 17:01

Re: Quelltext filtern
 
Ich dachte mir, dass wenn ich mir mit Webbrowser1.Navigate('') eine Webseite hole, der Webbrowser die erstmal runterläd, die irgendwo kurzzeitig speichert, eine Procedure aufruft (zb.: DocumentComplete/DownloadComplete) und man dann irgedwie den kurzzeitig gespeicherten Quelltext ändern kann und man dann dem Webbrowser den neuen Quelltext gibt, mit dem er dann die Webseite gestalltet.

Christian Seehase 4. Mai 2004 17:03

Re: Quelltext filtern
 
Moin SleepyMaster,

i.d.R. wirst Du die Datei in den Temporary Internet Files finden.

SleepyMaster 4. Mai 2004 17:05

Re: Quelltext filtern
 
@Christian Seehase: Das wäre aber nicht das Problem. Mein Problem wäre dann die Datei mit Webbrowser.Navigate zu öffnen, da dann die ganzen Links (falls es relative sind) nicht mehr gelten.

SirThornberry 4. Mai 2004 17:16

Re: Quelltext filtern
 
du könntest die datei mit idhttp von den indies runterladen. Dann im Speicher abändern und den stream in TWebbrowser laden

Christian Seehase 4. Mai 2004 17:16

Re: Quelltext filtern
 
Moin Sleepy Master,

Zitat:

Zitat von SleepyMaster
da dann die ganzen Links (falls es relative sind) nicht mehr gelten.

wieso, die werden doch nicht automatisch aufgelöst.

SleepyMaster 4. Mai 2004 17:20

Re: Quelltext filtern
 
Zitat:

wieso, die werden doch nicht automatisch aufgelöst.
Grade das ist ja mein Problem! Wenn ich eine Webseite runterlad und darin ein Bild relativ verlinkt ist (.\images\KA.bmp) und ich die Webseite von meinem PC lad, dann findet er das Bild logischerweiße nicht!

Zitat:

du könntest die datei mit idhttp von den indies runterladen. Dann im Speicher abändern und den stream in TWebbrowser laden
Und wie lad ich einen stream in den TWebbrowser?

SirThornberry 4. Mai 2004 17:21

Re: Quelltext filtern
 
irgendwie hatten wir vor paar tagen/wochen schonmal nen thread (Stream in TWebbrowser) wo das gefragt und gelöst wurde - also einfach mal die suche benutzen

Das sollte nen brauchbarer Ansatz sein
[Edit] http://www.delphipraxis.net/internal...=164171#164171 [/Edit]

Christian Seehase 4. Mai 2004 17:22

Re: Quelltext filtern
 
Moin Sleepy Master,

Zitat:

Zitat von SleepyMaster
und ich die Webseite von meinem PC lad, dann findet er das Bild logischerweiße nicht!

dann musst Du den Link eben selber auflösen. Dürfte schaffbar sein.

SleepyMaster 4. Mai 2004 17:25

Re: Quelltext filtern
 
Ja! Schaffbar schon :mrgreen:
aber ich hatte gehofft, mir den aufwand ersparen zu können! :zwinker:

Und außerdem fände ich es "schöner" wenn ich dafür nicht extra einen Datei auf der Festplatte temporär anlegen muss!

a.vollmer 4. Mai 2004 17:25

Re: Quelltext filtern
 
quelltext laden, in stringlist laden und so im webbrowser aufrufen:

Delphi-Quellcode:
uses
  ActiveX;

procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
  sl: TStringList;
  ms: TMemoryStream;
begin
  WebBrowser.Navigate('about:blank');
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
   Application.ProcessMessages;

  if Assigned(WebBrowser.Document) then
  begin
    sl := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        sl.Text := HTMLCode;
        sl.SaveToStream(ms);
        ms.Seek(0, 0);
        (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      sl.Free;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WB_LoadHTML(WebBrowser1,stringliste.text);
end;

SleepyMaster 4. Mai 2004 17:28

Re: Quelltext filtern
 
Woahw! Super! :thuimb:

Vielen Dank!!!

SleepyMaster 4. Mai 2004 17:47

Re: Quelltext filtern
 
Habs jetzt so gemacht:

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  PersistStream: IPersistStreamInit;
  Stream: IStream;
  ms: TMemoryStream;
  s:string;
begin
  ms:=TMemoryStream.Create;
  ms.Clear;
  PersistStream := Webbrowser1.Document as IPersistStreamInit;
  Stream := TStreamAdapter.Create(ms, soReference) as IStream;
  PersistStream.Save(Stream, True);
  MS.Position:=0;
  SetLength(S,MS.Size);
  Ms.Read(S[1],MS.Size);

  s:='Hallo';

  Ms.Clear;
  MS.Write(s[1],Length(s));
  MS.Position:=0;
  PersistStream.Load(Stream);
end;
Vielen Dank nochmal a.vollmer

Luckie 4. Mai 2004 18:06

Re: Quelltext filtern
 
Und wo wird der MemoryStream wieder freigegeben? Der Resourcenschutzblock (tyr-finally) fehlt auch in diesem Zusammenhang.

Sehe gerade der StreamAdapter wird auch nicht wieder freigegeben.

SleepyMaster 5. Mai 2004 19:58

Re: Quelltext filtern
 
War ja nur mal grade Quick'n'dirty hingeschmiert.

Aber hast ja recht:

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  PersistStream: IPersistStreamInit;
  Stream: IStream;
  ms: TMemoryStream;
  s:string;
begin
try
  ms:=TMemoryStream.Create;
  ms.Clear;
  PersistStream := Webbrowser1.Document as IPersistStreamInit;
  try
    Stream := TStreamAdapter.Create(ms, soReference) as IStream;
    PersistStream.Save(Stream, True);
    MS.Position:=0;
    SetLength(S,MS.Size);
    Ms.Read(S[1],MS.Size);

    s:='Hallo';

    Ms.Clear;
    MS.Write(s[1],Length(s));
    MS.Position:=0;
    PersistStream.Load(Stream);
  finally
    Stream.Free;
finally
  MS:Free;
end;
end;
so ungefähr!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr.

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