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

这是一篇关于插入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>标签也是可行的,推荐使用。

posted @ 2011-12-22 16:21  stma  阅读(1064)  评论(0)    收藏  举报