整理 TWebBrowser 常用文檔操作,封裝為三個通用過程:ExecuteScript(執行 JS/VBS)、AppendToWB(追加 HTML,不執行腳本)、WBLoadHTML(重載整頁,支援腳本執行)。
界面效果:

{執行腳本}
procedure TfrmSavePages.ExecuteScript(aWebBrowser: TWebBrowser; lScript: TStrings; language: String = 'javascript');
var HTDoc: IHTMLDocument2;
begin
HTDoc := aWebBrowser.Document as IHTMLDocument2;
if (HTDoc <> nil) and (HTDoc.parentWindow <> nil) then
HTDoc.parentWindow.ExecScript(lScript.Text, OleVariant(language));
end;
{追加 HTML(不執行腳本)}
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(支援腳本執行)}
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;
{執行 JS}
Memo1.Lines.Add('alert("Hello World!");');
ExecuteScript(WebBrowser1, Memo1.Lines, 'javascript');
{追加 HTML}
Memo1.Lines.Add('AppendToWB 演示');
AppendToWB(WebBrowser1, Memo1.Lines);
{重載含腳本頁面}
Memo1.Lines.Add('');
WBLoadHTML(WebBrowser1, Memo1.Lines);
選擇建議: 需執行腳本用 WBLoadHTML(相當於重新導航);單純追加內容用 AppendToWB(較輕量);動態交互用 ExecuteScript。