資訊: 存取從物件模型內 ActiveX 控制項

文章翻譯 文章翻譯
文章編號: 172763 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

撰寫 ActiveX 控制項的 [網際網路時, 通常可能需要存取物件模型的 HTML 網頁。物件模型,可讓 HTML 頁面中的各種元素的存取。

本文將告訴您存取物件模型,從 Visual C++ 和 Visual Basic 並涵蓋了網際網路總管 (IE) 3.x 及 4.0。

其他相關資訊

物件模型

文件物件模型可分別 ActiveX 軟體開發套件 (SDK) 和網際網路用戶端 SDK Internet Explorer 3.x 及 4.0 中, 找到。物件模型會說明,如下所示:
   window
      - location
      - frames
      - ...
      - document
         - links
         - forms
            - elements
				
視窗物件就會位於此階層的上層。視窗具有輪流都有它自己的屬性組的一個文件] 屬性。請如需進一步的詳細資訊,參閱適當的 SDK。

為什麼應該控制項需要存取物件模型?

控制項可以存取 (且在某些情況下修改) 內嵌於網頁的相關資訊。如果要執行這項操作,控制項必須存取物件模型。 比方說控制項可以列舉所有網頁上的項目。在動態 HTML 的情況下控制項可以存取網頁中的幾乎任何 HTML 項目。

存取物件模型

使用自動化和 COM 介面實作物件模型。當控制項能夠存取物件模型的頂部層級之後再它可以深入使用自動化或 COM 介面的物件模型。本文將告訴您這兩個步驟:
  1. 取得物件模型的頂部層級。
  2. 向下切入至物件模型。

取得物件模型 (視覺 C++) 的上一層

使用 IWebBrowserApp (為 Internet Explorer 3.x 與 4.x)

IWebBrowserApp 是網頁瀏覽器控制項所公開的介面。 它有文件屬性 (或 get_document 方法) 如果使用 vtable 介面來允許存取使用中文件的自動化物件。如果文件的 HTML 文件自動化物件有提供指令碼物件模型的 [視窗] 物件的指令碼屬性。因此連到物件模型控制項,必須完成下列:

  • 其包含的 HTML 網頁從取得 IWebBrowserApp。
  • 取得 IWebBrowserApp 的文件屬性。
  • 取得文件的指令碼屬性。
這會將您放在物件模型中最高層級 (視窗物件)。 然後使用來向下切入的自動化進一步。

取得 [IWebBrowserApp

取得 [IWebBrowserApp 是具有兩個步驟的程序:
  1. 若要取得 IServiceProvider 使用 IOleClientSite 指標。中的 ATL 控制項,this 指標可取得存取 m_spClientSite 成員的控制項。MFC 控制項中,您可以藉由呼叫 COleControl::GetClientSite() 取得 this 指標。控制項具有 IOleClientSite 介面,其容器的存取。它可用於 IServiceProvider QI 該指標:
    pClientSite->QueryInterface(IID_IServiceProvider,
                              (void **)&pISP);
    						
  2. 使用 [IServiceProvider 取得 IWebBrowserApp。使用 [IServiceProvider,一個 QueryService 都可以取得 [IWebBrowserApp:
          pISP->QueryService(SID_SWebBrowserApp, IID_IWebBrowserApp,
                            (void **)&pIWebBrowserApp));
    						
而且,如果您是程式設計網際網路總管 4 (含) 以後版本,您可以取得的這段程式碼具有容器 IWebBrowser2 介面的指標:
   pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,
     (void **)&pIWebBrowser2));
				
QueryService 是與 QueryInterface 不同,因為它沒有遵循識別規則中 COM。所以,如果物件本身不會實作 IWebBrowserApp,它可以委派給包含的物件和 QueryService 它的一個 IWebBrowserApp。

取得 IWebBrowserApp 的文件屬性

IWebBrowserApp 是雙重介面。它有一個文件屬性和也 get_Document 方法。任一個可用來取得使用中文件 IDispatch。一旦您有 [IDispatch,然後您可以取得指令碼屬性。

取得文件的指令碼屬性

使用 [IDispatch 取得上方,取得使用自動化的指令碼屬性。這會讓指令碼的物件模型或視窗物件中頂部層級。

取得物件模型 (視覺 C++) 的頂部層級

(Internet Explorer 4.0 僅限)

網際網路總管 4.0 可存取物件模型更容易。這是一個單步驟程序:
  1. 從 [IClientSite 取得 [IHTMLDocument2。

從 IOleClientSite 取得 IHTMLDocument2

每個控制項都 IClientSite 其容器的存取。從用戶端站台 IHTMLDocument2 QI-ing 應該讓指令碼物件模型。
   IOleContainer* pContainer = NULL;
   IHTMLDocument2* pDoc = NULL;

   pClientSite->GetContainer( &pContainer );
   if ( pContainer != NULL )
      pContainer->QueryInterface( &IID_IHTMLDocument2, &pDoc );
				
檢查從上述的呼叫傳回的值。如果控制項不內嵌在 HTML 網頁內,或者容器不網際網路總管 4.0 上述的呼叫就會失敗。

取得 IHTMLDocument2 提供指令碼物件模型中的文件物件。然後自動化介面或 vtable 介面可以被用來深入物件模型。

取得最上層的物件模型 (視覺基本)

使用者控制項的父屬性來存取自動化物件。父屬性的 Visual Basic 文件,從 Internet Explorer 會傳回其指令碼屬性會傳回 IOmWindow 物件的物件。

Visual Basic 文件中提供的範例是,如下所示:
Parent.Script.get_document.bgColor = "Blue"
				
的 Parent 屬性取得自動化物件。然後指令碼屬性提供我們指令碼物件模型的 [視窗] 物件。然後不同的屬性和方法可以存取就像任何其他的自動化物件。

上述程式碼行應閱讀,如下所示:
Parent.Script.document.bgColor = "Blue"
				
即使 get_document 無誤在 Internet Explorer 3.x,它將無法運作,在網際網路總管 4.0 中。正確的方法是使用文件屬性。這都可以同時在 Internet Explorer 3.x 及 4.0。

向下物件模型切入

向下物件模型切入就做為呼叫屬性和使用自動化的方法一樣簡單的。Internet Explorer 3.x 的使用僅自動化。 網際網路總管 4.0 可用於 vtable 介面。如需詳細資訊,請參閱網際網路用戶端 SDK 中 driller 範例。

屬性

文章編號: 172763 - 上次校閱: 2001年7月18日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Client Software Development Kit 4.01
關鍵字:?
kbmt kbfaq kbinfo KB172763 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:172763
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com