Acessando membros não expostos no Modelo de Objeto do Documento HTML gerenciado
O DOM (Modelo de Objeto de Documento) HTML gerenciado contém uma classe chamada HtmlElement que expõe as propriedades, métodos e eventos que todos os elementos HTML têm em comum. Às vezes, no entanto, será necessário acessar membros que a interface gerenciada não expõe diretamente. Este tópico examina duas maneiras de acessar membros não expostos, incluindo funções JScript e VBScript definidas dentro de uma página da Web.
Acessando Membros Não Expostos por meio de Interfaces Gerenciadas
HtmlDocument e HtmlElement fornecer quatro métodos que permitem o acesso a membros não expostos. A tabela a seguir mostra os tipos e seus métodos correspondentes.
Tipo do membro | Método(s) |
---|---|
Propriedades (HtmlElement) | GetAttribute SetAttribute |
Métodos | InvokeMember |
Eventos (HtmlDocument) | AttachEventHandler DetachEventHandler |
Eventos (HtmlElement) | AttachEventHandler DetachEventHandler |
Eventos (HtmlWindow) | AttachEventHandler DetachEventHandler |
Ao usar esses métodos, presume-se que se tem um elemento do tipo subjacente correto. Suponha que você queira escutar o evento Submit
de um elemento FORM
em uma página HTML, para que seja possível executar o pré-processamento nos valores de FORM
antes de o usuário enviá-los para o servidor. Teoricamente, se tiver controle sobre a HTML, você definirá que o FORM
terá um atributo ID
único.
<HTML>
<HEAD>
<TITLE>Form Page</TITLE>
</HEAD>
<BODY>
<FORM ID="form1">
... form fields defined here ...
</FORM>
</BODY>
</HTML>
Depois de carregar esta página no WebBrowser controle, você pode usar o método para recuperar o GetElementById em tempo de FORM
execução usando form1
como o 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
Acessando as Interfaces Não Gerenciadas
Também é possível acessar membros não expostos no HTML DOM gerenciado usando as interfaces Component Object Model (COM) não gerenciadas expostas por cada classe DOM. Isso será recomendado se for necessário fazer várias chamadas em membros não expostos ou se os membros não expostos retornarem outras interfaces não gerenciadas não encapsuladas pelo o HTML DOM gerenciado.
A tabela a seguir mostra todas as interfaces não gerenciadas expostas por meio do HTML DOM gerenciado. Clique em cada link para obter uma explicação de seu uso e exemplos de código.
Tipo | Interface não gerenciada |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
A maneira mais fácil de usar as interfaces COM é adicionar uma referência à biblioteca de HTML DOM não gerenciada (MSHTML.dll) por meio do aplicativo, embora não haja suporte para isso.
Acessando Funções de Script
Uma página HTML pode definir uma ou mais funções usando uma linguagem de script como JScript ou VBScript. Essas funções são colocadas dentro de uma página SCRIPT
na página e podem ser executadas sob demanda ou em resposta a um evento no DOM.
Você pode chamar qualquer função de script definida em uma página HTML usando o InvokeScript método. Se o método de script retornar um elemento HTML, você poderá usar uma conversão para converter esse resultado de retorno em um HtmlElementarquivo . Para obter detalhes e código de exemplo, consulte InvokeScript.
Confira também
.NET Desktop feedback