TWebBrowser平时用得比较多,收集总结了一些代码。这篇是关于插入HTML和执行脚本的方法,三个简短实用的函数,完成WebBrowser加载HTML以及执行脚本的任务。附带完整工程...
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>标签也是可行的,推荐使用。具体区别下载完整工程感受下吧。
源码(Source):WB_ControlJS_src.rar
编译好的工程文件:WB_ControlJS_bin.rar