![]() |
TWebbrowser.document in Variable sichern
Hallo zusammen,
weiß jemand von Euch, wie ich das aktive Dokument von einem TWebrowser in eine Variable (TDocument) sichern kann? Eine normals Zuweisung reicht nicht,da hier offensichtlich nur der Zeiger übergeben wird. Mit assign funktioniert es irgendwie auch nicht. Vielleicht auch, nur ich blicke nicht wie. Danke! |
Re: TWebbrowser.document in Variable sichern
Hi,
so könnte es funktionieren:
Delphi-Quellcode:
Grüße vom marabu
uses
ActiveX, SysUtils, SHDocVw, MSHTML; procedure SaveDocument(doc: IDispatch; const fn: TFileName); var pf: IPersistFile; begin if doc.QueryInterface(IPersistFile, pf) = 0 then pf.Save(PWideChar(fn), false); end; procedure TDemoForm.SaveButtonClick(Sender: TObject); begin SaveDocument(WebBrowser.Document, 'c:\inetpub\wwwroot\marabu.html'); end; |
Re: TWebbrowser.document in Variable sichern
Hallo Marabu,
danke für deine Hilfe. Ich habe es mal ausprobiert, leider ist der Rückgabewert von QueryInterface immer ungleich 0.Diese Zugriff wird also nicht unterstützt. Ich habe es dann noch mit IPersitStorage probiert, aber das ist das Gleiche. Gibt es noch einen anderen Ansatz? Liegt es vielleicht an der Delphi bzw IE Version? Danke! |
Re: TWebbrowser.document in Variable sichern
für was brauchst du das? willst du den Quelltext der Seite speichern?
|
Re: TWebbrowser.document in Variable sichern
Delphi-Quellcode:
uses
ActiveX; function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean; var ps: IPersistStreamInit; fs: TFileStream; sa: IStream; begin ps := WebBrowser.Document as IPersistStreamInit; fs := TFileStream.Create(FileName, fmCreate); try sa := TStreamAdapter.Create(fs, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); finally fs.Free; end; end; function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin WB_SaveHTMLCode(Webbrowser1, 'c:\test.txt'); end; procedure TForm1.Button2Click(Sender: TObject); begin WB_GetHTMLCode(Webbrowser1, Memo1.Lines); end; |
Re: TWebbrowser.document in Variable sichern
an den Quelltext kommt man ganz einfach:
Delphi-Quellcode:
(WebBrowser.Document as IHTMLDocument2).body.outerHTML
|
Re: TWebbrowser.document in Variable sichern
Wo bin ich nur mit meinen Gedanken.
@SirThornberry: So speicherst du aber nur das Body-Tag samt Inhalt, nicht das Document. So erhältst du wenigestens den HTML-Code - dann fehlt allerdings noch DOCTYPE:
Delphi-Quellcode:
procedure SaveDocumentElement(doc: IDispatch; fn: TFileName);
var d3: IHTMLDocument3; fs: TFileStream; html: String; begin if doc.QueryInterface(IHTMLDocument3, d3) = 0 then begin fs := TFileStream.Create(fn, fmCreate); html := d3.documentElement.outerHTML; fs.Write(html[1], Length(html)); fs.Free; end; end; Zitat:
![]() Zitat:
marabu |
Re: TWebbrowser.document in Variable sichern
Danke nochmal für alle Eure Tipps.
Ich habe jetzt hinbekommen :mrgreen: Ozz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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