程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> WebBrowser例程 - 插入HTML和執行腳本的方法

WebBrowser例程 - 插入HTML和執行腳本的方法

編輯:Delphi

 本文示例源代碼或素材下載

  TWebBrowser平時用得比較多,也收集過大量雜亂無章的技巧。不過東西太多太雜,每到用的時又要重新拼湊一番,實在是太累。於是早就有寫一組WebBrowser例程,打算把常用的一些類似代碼整理一下,以便查用。附帶完整工程,見文章末尾。 

  這是第一篇,關於插入Html和執行腳本的方法。程序界面如圖,

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>標簽也是可行的,推薦使用。具體區別下載完整工程感受下吧。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved