在 MSHTML 中,IHTMLWindow2~IHTMLWindow4 系列接口對應 JavaScript 的 window 對象,代表瀏覽器視窗或框架上下文。所有全局變量、函數、DOM 根節點均掛載於此。本文系統梳理其屬性、方法與事件,為 Delphi 網頁自動化開發提供速查手冊。
| 屬性 | 說明 |
|---|---|
| frames | 框架集合(同 window.frames) |
| location | Location 對象 |
| history | History 對象 |
| navigator | Navigator 對象 |
| document | Document 對象(核心入口) |
| screen | Screen 對象 |
| self / window | 指向自身 |
| top | 最頂層視窗 |
| parent | 父視窗 |
| opener | 打開當前視窗的來源視窗 |
| closed | 視窗是否已關閉 |
| event | 當前事件對象(IE 專有,極實用) |
| external | 外部擴展接口(如 AddFavorite) |
| clientInformation | 同 navigator |
| offscreenBuffering | 雙緩衝繪製開關 |
| name | 視窗名稱(可讀寫) |
| status / defaultStatus | 狀態列文字 |
setTimeout、setInterval、clearTimeout、clearIntervalalert、confirm、prompt、showModalDialog、showModelessDialog、showHelpnavigate、open、close、focus、blurmoveTo/By、resizeTo/By、scrollTo/By、scrollexecScript(在當前上下文執行腳本字串)onload、onunload、onbeforeunloadonfocus、onbluronerroronresize、onscrollonhelpattachEvent / detachEvent:標準事件綁定/解綁(推薦用法)print:觸發列印對話框showModelessDialog:非模態對話框screenLeft / screenTop:視窗相對螢幕座標clipboardData:剪貼簿數據訪問onbeforeprint / onafterprint:列印前後回調createPopup:創建彈出菜單對象(IE 專有)frameElement:獲取當前視窗所在的 <iframe> 或 <frame> 元素uses MSHTML, SHDocVw;
var
Win2: IHTMLWindow2;
Win3: IHTMLWindow3;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
// 僅處理主框架完成事件,避免 iframe 重複觸發
if pDisp = (Sender as TWebBrowser).Application then
begin
Win2 := ((Sender as TWebBrowser).Document as IHTMLDocument2).parentWindow;
// 如需 IHTMLWindow3/4,直接 QueryInterface
Win3 := Win2 as IHTMLWindow3;
end;
end;
top、parent、frames[i] 導航框架樹,注意同源策略限制。execScript 僅支援 VBScript/JScript,現代頁面建議用 document.parentWindow.eval 或創建 <script> 元素注入。showModalDialog 會阻塞 Delphi 主線程,長時間操作請用非模態或異步方案。window.event 僅在事件處理過程中有效,跨線程或異步回調中會為 nil,需及時複製關鍵字段。closed 屬性或監聽 onunload 判斷嵌入瀏覽器是否被用戶關閉。Window 對象是 MSHTML 自動化的「總開關」。熟練掌握其屬性導航、方法調用、事件綁定,配合 Delphi 的 COM 互操作機制,即可實現從簡單頁面操作到複雜單頁應用(SPA)測試、數據抓取、自動化測試等全棧場景。