![]() |
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 |
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.
|
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.
|
Re: Quelltext filtern
Moin SleepyMaster,
i.d.R. wirst Du die Datei in den Temporary Internet Files finden. |
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.
|
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
|
Re: Quelltext filtern
Moin Sleepy Master,
Zitat:
|
Re: Quelltext filtern
Zitat:
Zitat:
|
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] ![]() |
Re: Quelltext filtern
Moin Sleepy Master,
Zitat:
|
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! |
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; |
Re: Quelltext filtern
Woahw! Super! :thuimb:
Vielen Dank!!! |
Re: Quelltext filtern
Habs jetzt so gemacht:
Delphi-Quellcode:
Vielen Dank nochmal a.vollmer
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; |
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. |
Re: Quelltext filtern
War ja nur mal grade Quick'n'dirty hingeschmiert.
Aber hast ja recht:
Delphi-Quellcode:
so ungefähr!
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; |
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