受控 HTML 文件物件模型 (DOM) 包含稱為 HtmlElement 的類別,可公開全部 HTML 元素通用的屬性、方法和事件。 不過,有時候,您必須存取 受控介面不會直接公開的成員。 本主題會檢查存取未公開成員的兩種方式,包括網頁內定義的 JScript 和 VBScript 函式。
透過受控介面存取未公開的成員
HtmlDocument 和 HtmlElement 提供四種方法,可讓您存取未公開的成員。 下表顯示型別及其對應的方法。
您使用這些方法時,假設您有正確基礎類型的元素。 假設您想要在 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。