托管 HTML 文档对象模型 (DOM) 包含一个名为 HtmlElement 的类,该类公开所有 HTML 元素所共同拥有的属性、方法和事件。 不过在某些情况下,您需要访问托管接口不直接公开的成员。 本主题将分析两种访问未公开成员的方法,包括在网页内部定义的 JScript 和 VBScript 函数。
通过托管接口访问未公开的成员
HtmlDocument 和 HtmlElement 提供了四种可以访问未公开成员的方式。 下表显示了各种类型及其相应的方法。
| 成员类型 | 方法 | 
|---|---|
| 属性 (HtmlElement) | |
| 方法 | |
| 事件 (HtmlDocument) | |
| 事件 (HtmlElement) | |
| 事件 (HtmlWindow) | 
使用这些方法时,假设您有一个具有基础类型恰好合适的元素。 假设您要侦听 HTML 页上的 FORM 元素的 Submit 事件,以便可以在用户向服务器提交 FORM 的值之前先对这些值进行某些预处理。 理想情况下,如果可以控制 HTML,则可以将 FORM 定义为拥有唯一的 ID 特性。
<HTML>
    
    <HEAD>
        <TITLE>Form Page</TITLE>
    </HEAD>
    <BODY>
        <FORM ID="form1">
             ... form fields defined here ...
        </FORM>
    </BODY>
</HTML>
将此页加载到 WebBrowser 控件后,可以将 form1 作为参数使用 GetElementById 方法在运行时检索 FORM。
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
        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");
                    }
                }
            }
        }
访问非托管接口
您还可以使用由每个 DOM 类公开的非托管组件对象模型 (COM) 接口来访问托管 HTML DOM 上的未公开成员。 如果必须多次调用未公开成员,或者未公开成员返回不是由托管 HTML DOM 包装的其他非托管接口,建议使用此方式。
下表显示了通过托管 HTML DOM 公开的所有非托管接口。 单击每个链接可以获取其用法及代码示例的解释。
| 类型 | 非托管接口 | 
|---|---|
使用 COM 接口的最简便方法是从应用程序中添加对非托管 HTML DOM 库 (MSHTML.dll) 的引用。 .NET Framework 2.0 包含一个主互操作程序集,该程序集将非托管调用作为托管方法公开;在以前版本的 .NET Framework 中,您必须自己生成此托管包装。 有关添加项目引用的更多信息,请参见主互操作程序集和将类型库当作程序集导入。
访问 Script 函数
通过使用脚本语言(如 JScript 或 VBScript),HTML 页可以定义一个或多个函数。 这些函数均放置在此页中的 SCRIPT 页内,并且可以按需运行或响应 DOM 中的事件。
您可以使用 InvokeScript 方法调用在 HTML 页中定义的任何脚本函数。 如果此脚本方法返回一个 HTML 元素,则可以使用强制转换将此结果转换为 HtmlElement。 有关详细信息及代码示例,请参见 InvokeScript。