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

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

編輯:Delphi

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

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