Acceso a miembros no expuestos en el Modelo de objetos de documento HTML administrado

Document Object Model (DOM) HTML administrado contiene una clase denominada HtmlElement que expone las propiedades, los métodos y los eventos que todos los elementos HTML tienen en común. Aun así, a veces tendrá que acceder a los miembros que la interfaz administrada no expone directamente. En este tema se examinan dos maneras de acceder a los miembros no expuestos, incluidas funciones JScript y VBScript definidas dentro de una página web.

Acceso a miembros no expuestos a través de interfaces administradas

HtmlDocument y HtmlElement proporcionan cuatro métodos que permiten el acceso a los miembros no expuestos. En la tabla siguiente se muestran los tipos y sus métodos correspondientes.

Tipo de miembro Métodos
Propiedades (HtmlElement) GetAttribute

SetAttribute
Métodos InvokeMember
Eventos (HtmlDocument) AttachEventHandler

DetachEventHandler
Eventos (HtmlElement) AttachEventHandler

DetachEventHandler
Eventos (HtmlWindow) AttachEventHandler

DetachEventHandler

Si usa estos métodos, se da por supuesto que tiene un elemento del tipo subyacente correcto. Supongamos que quiere escuchar el evento Submit de un elemento FORM en una página HTML, de modo que pueda realizar algún procesamiento previo en los valores de FORM antes de que el usuario los envíe al servidor. Idealmente, si tiene el control del código HTML, definiría FORM de modo que tuviera un atributo ID único.

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

Después de cargar esta página en el control WebBrowser, puede usar el método GetElementById para recuperar FORM en tiempo de ejecución mediante form1 como argumento.

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

Acceso a interfaces no administradas

También puede acceder a miembros no expuestos en el DOM HTML administrado mediante las interfaces del Modelo de objetos componentes (COM) no administradas que expone cada clase DOM. Esto se recomienda si tiene que realizar varias llamadas a miembros no expuestos o si los miembros no expuestos devuelven otras interfaces no administradas que el DOM HTML administrado no encapsula.

En la tabla siguiente se muestran todas las interfaces no administradas que se exponen a través del DOM HTML administrado. Haga clic en cada vínculo para obtener una explicación de su uso y código de ejemplo.

Tipo Interfaz no administrada
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

La manera más fácil de usar las interfaces COM consiste en agregar una referencia a la biblioteca de DOM HTML no administrada (MSHTML.dll) desde la aplicación, aunque esto no se admite.

Acceso a funciones de script

Una página HTML puede definir una o varias funciones mediante un lenguaje de scripting como JScript o VBScript. Estas funciones se colocan dentro de una página SCRIPT en la página y se pueden ejecutar a petición o en respuesta a un evento del DOM.

Puede llamar a cualquier función de script que defina en una página HTML mediante el método InvokeScript. Si el método de script devuelve un elemento HTML, puede usar una conversión para convertir este resultado devuelto en HtmlElement. Para obtener más información y código de ejemplo, vea InvokeScript.

Consulte también