WebBrowser例程 - 插入HTML和执行脚本的方法

TWebBrowser平时用得比较多,也收集过大量杂乱无章的技巧。不过东西太多太杂,每到用的时又要重新拼凑一番,实在是太累。于是早就有写一组WebBrowser例程,打算把常用的一些类似代码整理一下,以便查用。附带完整工程,见文章末尾。 

 

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

 

先看代码:

ContractedBlock.gif ExpandedBlockStart.gif 关键代码
{ 在 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 <> nilthen
  
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 <> nilthen
  
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

转载于:https://www.cnblogs.com/bits/archive/2009/03/08/Delphi-WebBrowser_Control_htmljs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值