首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi TWebBrowser 與 MSHTML 深度解析 (3):Window 對象完整接口參考

     編輯:Delphi

Window 對象:DOM 的頂層入口

在 MSHTML 中,IHTMLWindow2~IHTMLWindow4 系列接口對應 JavaScript 的 window 對象,代表瀏覽器視窗或框架上下文。所有全局變量、函數、DOM 根節點均掛載於此。本文系統梳理其屬性、方法與事件,為 Delphi 網頁自動化開發提供速查手冊。

IHTMLWindow2:核心接口

關鍵屬性

屬性說明
frames框架集合(同 window.frames)
locationLocation 對象
historyHistory 對象
navigatorNavigator 對象
documentDocument 對象(核心入口)
screenScreen 對象
self / window指向自身
top最頂層視窗
parent父視窗
opener打開當前視窗的來源視窗
closed視窗是否已關閉
event當前事件對象(IE 專有,極實用)
external外部擴展接口(如 AddFavorite)
clientInformation同 navigator
offscreenBuffering雙緩衝繪製開關
name視窗名稱(可讀寫)
status / defaultStatus狀態列文字

核心方法

  • 計時器:setTimeout、setInterval、clearTimeout、clearInterval
  • 對話框:alert、confirm、prompt、showModalDialog、showModelessDialog、showHelp
  • 導航與視窗控制:navigate、open、close、focus、blur
  • 幾何變換:moveTo/By、resizeTo/By、scrollTo/By、scroll
  • 腳本執行:execScript(在當前上下文執行腳本字串)

常用事件

  • 生命週期:onload、onunload、onbeforeunload
  • 焦點:onfocus、onblur
  • 錯誤:onerror
  • 視窗狀態:onresize、onscroll
  • 其他:onhelp

IHTMLWindow3:事件綁定與列印擴展

新增方法

  • attachEvent / detachEvent:標準事件綁定/解綁(推薦用法)
  • print:觸發列印對話框
  • showModelessDialog:非模態對話框

新增屬性

  • screenLeft / screenTop:視窗相對螢幕座標
  • clipboardData:剪貼簿數據訪問

新增事件

  • onbeforeprint / onafterprint:列印前後回調

IHTMLWindow4:彈出菜單與框架元素

  • createPopup:創建彈出菜單對象(IE 專有)
  • frameElement:獲取當前視窗所在的 <iframe> 或 <frame> 元素

Delphi 獲取 Window 對象的標準模式

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;

實戰技巧與避坑指南

  1. 跨框架訪問:使用 top、parent、frames[i] 導航框架樹,注意同源策略限制。
  2. 腳本注入:execScript 僅支援 VBScript/JScript,現代頁面建議用 document.parentWindow.eval 或創建 <script> 元素注入。
  3. 模態對話框阻塞:showModalDialog 會阻塞 Delphi 主線程,長時間操作請用非模態或異步方案。
  4. 事件對象:window.event 僅在事件處理過程中有效,跨線程或異步回調中會為 nil,需及時複製關鍵字段。
  5. 視窗關閉檢測:輪詢 closed 屬性或監聽 onunload 判斷嵌入瀏覽器是否被用戶關閉。

總結

Window 對象是 MSHTML 自動化的「總開關」。熟練掌握其屬性導航、方法調用、事件綁定,配合 Delphi 的 COM 互操作機制,即可實現從簡單頁面操作到複雜單頁應用(SPA)測試、數據抓取、自動化測試等全棧場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved