[英]How do I save the contents of TWebBrowser, including user-entered form values?
is it possible to save entire document loaded in Webbrowser (in Delphi) as a ordinary HTML file with new values (I mean values entered by user in html's forms this document)? 是否可以将Webbrowser(在Delphi中)中加载的整个文档保存为具有新值的普通HTML文件(我的意思是用户在html的表单中输入的值本文档)? I need this for reading this HTML document with all values next time when application will be used.
我需要这个,以便在下次使用应用程序时读取包含所有值的HTML文档。
Sure this is possible! 当然这是可能的!
Small demo App, make a new vcl forms application, drop a TWebBrowser
, a TButton
and a TMemo
on your form and use this code (don't forget to bind OnCreate
for the Form and OnClick
for the Button) 小型演示应用程序,创建一个新的vcl表单应用程序,在表单上删除一个
TWebBrowser
,一个TButton
和一个TMemo
并使用此代码(不要忘记绑定OnCreate
for Form和OnClick
for the Button)
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls,mshtml, ActiveX;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//code snagged from about.com
procedure WBLoadHTML(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);
var
Doc : IHtmlDocument2;
begin
Doc := WebBrowser1.Document as IHtmlDocument2;
Memo1.Lines.Text := Doc.body.innerHTML;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Html : String;
begin
Html := 'change value of input and press Button1 to changed DOM<br/><input id="myinput" type="text" value="orgval"></input>';
WBLoadHTML(WebBrowser1, Html);
end;
end.
Output: 输出:
EDIT 编辑
As mjn pointed out, the values of password type inputs will not be shown. 正如mjn指出的那样, 密码类型输入的值将不会显示。 You can still can get their value though:
你仍然可以获得他们的价值:
add these 2 lines to Button1.Click and change html 将这两行添加到Button1.Click并更改html
OnCreate: 在OnCreate:
Html := 'change value of input and press Button1 to changed DOM<br/><input id="myinput" type="password" value="orgval"></input>';
OnClick: 的OnClick:
El := (Doc as IHtmlDocument3).getElementById('myinput') as IHtmlInputElement;
Memo1.Lines.Add(Format('value of password field = %s', [El.value]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.