Acessando membros não expostos no modelo de objeto de documento HTML gerenciado
O DOM (Document Object Model) 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, você precisará 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 fornecem 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 de Membro | Método(s) |
---|---|
Imóveis (HtmlElement) | GetAttribute SetAttribute |
Metodologia | InvokeMember |
Eventos (HtmlDocument) | AttachEventHandler DetachEventHandler |
Eventos (HtmlElement) | AttachEventHandler DetachEventHandler |
Eventos (HtmlWindow) | AttachEventHandler DetachEventHandler |
Quando você usa esses métodos, presume-se que você tem um elemento do tipo subjacente correto. Suponha que você queira ouvir o evento Submit
de um elemento FORM
em uma página HTML, para que possa executar algum pré-processamento nos valores do FORM
antes que o usuário os envie ao servidor. Idealmente, se você tiver controle sobre o HTML, você definiria o FORM
para ter um atributo ID
exclusivo.
<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 controle WebBrowser, você pode usar o método GetElementById para recuperar o FORM
em tempo de execução usando 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
Acessando interfaces não gerenciadas
Você também pode acessar membros não expostos no DOM HTML gerenciado usando as interfaces COM (Component Object Model) não gerenciadas expostas por cada classe DOM. Isso é recomendado se você tiver que fazer várias chamadas contra membros não expostos ou se os membros não expostos retornarem outras interfaces não gerenciadas não encapsuladas pelo DOM HTML gerenciado.
A tabela a seguir mostra todas as interfaces não gerenciadas expostas por meio do DOM HTML gerenciado. Clique em cada link para obter uma explicação de seu uso e, por exemplo, 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 HTML DOM não gerenciada (MSHTML.dll) do seu aplicativo, embora isso não seja suportado.
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 de SCRIPT
na página e podem ser executadas sob demanda ou em resposta a um evento no DOM.
Você pode chamar quaisquer funções de script definidas em uma página HTML usando o método InvokeScript. Se o método de script retornar um elemento HTML, pode usar um casting para converter esse resultado num HtmlElement. Para obter detalhes e código de exemplo, consulte InvokeScript.
Ver também
.NET Desktop feedback