Welcome

首页 / 软件开发 / Delphi / Delphi中WebBrowser例程 - 插入HTML和执行脚本的方法

Delphi中WebBrowser例程 - 插入HTML和执行脚本的方法2012-02-02 博客园 木桩TWebBrowser平时用得比较多,也收集过大量杂乱无章的技巧。不过东西太多太杂,每到用的时又要重新拼凑一 番,实在是太累。于是早就有写一组WebBrowser例程,打算把常用的一些类似代码整理一下,以便查用。附带完整 工程,见文章末尾。

这是第一篇,关于插入HTML和执行脚本的方法。程序界面如图,

先看代码:

关键代码

{ 在 WebBrowser 内执行脚本
用法:
Memo1.Lines.add("alert("Hello World!");");
ExecuteScript(WebBrowser1, Memo1.Lines, "javascript"); }
procedure TfrmSavePages.ExecuteScript(aWebBrowser: TWebBrowser; lScript: TStrings; language: String = "javascript");
var
HTDoc: IHTMLDocument2;
begin
HTDoc := (aWebBrowser.Document as IHTMLDocument2);
if (HTDoc <> nil) then
begin
if HTDoc.parentWindow <> nil then
HTDoc.parentWindow.ExecScript(lScript.Text, Olevariant(language)) ;
end;
end;

{ 向目标页面加入HTML
用法:
Memo1.Lines.add("<div>AppendToWB()演示</div>");
AppendToWB(WebBrowser1, Memo1.Lines); }
procedure AppendToWB(aWebBrowser: TWebBrowser; lHTML: TStrings) ;
var
HTDoc: IHTMLDocument2;
Range: IHTMLTxtRange;
begin
HTDoc := (aWebBrowser.Document as IHTMLDocument2);
if (HTDoc <> nil) then
begin
Range := (HTDoc.body AS IHTMLBodyElement).createTextRange;
Range.Collapse(False);
Range.PasteHTML(lHTML.Text);
end;
end;

{ 另一种加入HTML内容的方法,和之前插入方式不同,这个可以执行脚本
用法:WBLoadHTML(WebBrowser1, Memo1.Lines);}
procedure WBLoadHTML(WebBrowser: TWebBrowser; lHTML: TStrings);
var
ms: TMemoryStream;
begin
// 转到一个空页面
WebBrowser.Navigate("about:blank");
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;

if Assigned(WebBrowser.Document) then
begin
ms := TMemoryStream.Create;
try
// 将页面内容写入内存流
lHTML.SaveToStream(ms);
ms.Seek(0, soFromBeginning);
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
end;
end;

总结了一下,在已经载入的页面中执行脚本,最短的代码就是上面贴的这个了:

ExecuteScript(WebBrowser1, Memo1.Lines, "javascript");

将要执行的脚本内容读取到Memo1中,然后调用这个就可以了。后面的 javascript 也可以换成 vbscript。

关于两个写入HTML,第一个 AppendToWB() 方法虽然简单,但是不能执行脚本。而 WBLoadHTML() 通过 IPersistStreamInit接口写入HTML数据,相当于重载页面,所以附加<script>标签也是可行的,推荐使用。 具体区别下载完整工程感受下吧。