存取 Managed HTML 文件物件模型上未公開的成員

受控 HTML 文件物件模型 (DOM) 包含稱為 HtmlElement 的類別,可公開全部 HTML 元素通用的屬性、方法和事件。 不過,有時候,您必須存取 受控介面不會直接公開的成員。 本主題會檢查存取未公開成員的兩種方式,包括網頁內定義的 JScript 和 VBScript 函式。

透過受控介面存取未公開的成員

HtmlDocumentHtmlElement 提供四種方法,可讓您存取未公開的成員。 下表顯示型別及其對應的方法。

成員類型 方法
屬性 (HtmlElement) GetAttribute

SetAttribute
方法 InvokeMember
事件 (HtmlDocument) AttachEventHandler

DetachEventHandler
事件 (HtmlElement) AttachEventHandler

DetachEventHandler
事件 (HtmlWindow) AttachEventHandler

DetachEventHandler

您使用這些方法時,假設您有正確基礎類型的元素。 假設您想要在 HTML 頁面上接聽 FORM 元素的 Submit 事件,以便在使用者將 FORM 的值提交至伺服器之前,先對的值執行一些前置處理。 在理想情況下,如果您控制 HTML,您會定義具有唯一 ID 屬性的 FORM

<HTML>  
  
    <HEAD>  
        <TITLE>Form Page</TITLE>  
    </HEAD>  
  
    <BODY>  
        <FORM ID="form1">  
             ... form fields defined here ...  
        </FORM>  
    </BODY>  
  
</HTML>  

將此頁面載入 WebBrowser 控制項之後,您可以使用 GetElementById 方法,使用 form1 做為 自變數,在執行階段擷取 FORM

private void SubmitForm(String formName)
{
    HtmlElementCollection elems = null;
    HtmlElement elem = null;

    if (webBrowser1.Document != null)
    {
        HtmlDocument doc = webBrowser1.Document;
        elems = doc.All.GetElementsByName(formName);
        if (elems != null && elems.Count > 0)
        {
            elem = elems[0];
            if (elem.TagName.Equals("FORM"))
            {
                elem.InvokeMember("Submit");
            }
        }
    }
}
Private Sub SubmitForm(ByVal FormName As String)
    Dim Elems As HtmlElementCollection
    Dim Elem As HtmlElement

    If (WebBrowser1.Document IsNot Nothing) Then
        With WebBrowser1.Document
            Elems = .All.GetElementsByName(FormName)
            If (Not Elems Is Nothing And Elems.Count > 0) Then
                Elem = Elems(0)
                If (Elem.TagName.Equals("FORM")) Then
                    Elem.InvokeMember("Submit")
                End If
            End If
        End With
    End If
End Sub

存取非受控介面

您也可以使用每個 DOM 類別公開的非受控元件物件模型 (COM) 介面,存取受控 HTML DOM 上的未公開成員。 如果您必須對未公開的成員進行數次呼叫,或未公開的成員傳回非受控 HTML DOM 未包裝的其他非受控介面,則建議您這麼做。

下表顯示透過受控 HTML DOM 公開的全部非受控介面。 按兩下每個連結,以取得其使用方式的說明,以及範例程式碼。

類型 非受控介面
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

使用 COM 介面的最簡單方式是從您的應用程式新增非受控 HTML DOM 連結庫 (MSHTML.dll) 的參考,但不受支援。

存取指令碼函式

HTML 頁面可以使用 JScript 或 VBScript 等指令碼語言來定義一個或多個函式。 這些函式會放在頁面中的 SCRIPT 頁面內,而且可以視需要執行或回應 DOM 上的事件。

您可以使用 InvokeScript 方法來呼叫您在 HTML 頁面中定義的任何指令碼函式。 如果指令碼方法傳回 HTML 元素,您可以使用轉換將此傳回結果轉換成 HtmlElement。 如需詳細資料和範例程式碼,請參閱 InvokeScript

另請參閱