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
.NET Desktop feedback