Acesso a membros não expostos no modelo de objeto gerenciado do documento HTML
O gerenciado HTML documento objeto DOM (modelo) contém uma classe chamada HtmlElement que expõe as propriedades, métodos e eventos que todos os elementos HTML possuem em comum. Às vezes, no entanto, você precisará acessar membros de interface gerenciada não expor diretamente. Este tópico examina duas maneiras para acessar os membros não expostos, incluindo JScript e funções do VBScript definidas dentro de uma página da Web.
Acessando os membros não expostos por meio de Interfaces gerenciadas
HtmlDocumente HtmlElement fornecem quatro métodos que permitem o acesso a membros não exposta. A tabela a seguir mostra os tipos e seus métodos correspondentes.
Tipo de membro |
Método (s) |
---|---|
Propriedades (HtmlElement) |
|
Métodos |
|
Eventos (HtmlDocument) |
|
Eventos (HtmlElement) |
|
Eventos (HtmlWindow) |
Ao usar esses métodos, presume-se que você tenha um elemento do tipo subjacente correto. Suponha que você deseja ouvir o Submit o evento de um FORM elemento em um HTML da página, para que você possa realizar alguns Pré-processando no FORMdo valores antes do usuário envia-los para o servidor. O ideal é que, se você tiver controle sobre o HTML, você definiria a FORM ter um único ID atributo.
<HTML>
<HEAD>
<TITLE>Form Page</TITLE>
</HEAD>
<BODY>
<FORM ID="form1">
... form fields defined here ...
</FORM>
</BODY>
</HTML>
Após você carregar esta página para o WebBrowser controle, você pode usar o GetElementById método para recuperar o FORM em tempo de execução usando form1 como argumento.
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");
}
}
}
}
Acessando as Interfaces não gerenciadas
Você também pode acessar membros não expostos no DOM HTML gerenciado usando as interfaces não gerenciadas do modelo de objeto componente (COM) expostas por cada classe de DOM. Isso é recomendado caso você precise fazer várias chamadas contra membros não expostas, ou se os membros não expostos retornam outras interfaces não gerenciadas não delimitados por gerenciado DOM HTML.
A tabela a seguir mostra todas as interfaces não gerenciadas expostas por meio de gerenciado DOM HTML. Clique em cada link para uma explicação sobre seu uso e por exemplo o código.
Tipo |
Interface não gerenciada |
---|---|
A maneira mais fácil de usar as interfaces COM é adicionar uma referência à biblioteca do DOM em HTML não gerenciada (Mshtml. dll) do seu aplicativo. .NET Framework 2.0contém um assembly de interoperabilidade primária que expõe as chamadas não gerenciadas como métodos gerenciados; nas versões anteriores da .NET Framework, você precisa gerar esse wrapper gerenciado por você. Para obter mais informações sobre como adicionar uma referência a um projeto, consulte Assemblies de Interoperabilidade Primários e A importação de uma biblioteca de tipos como um Assembly..
Acessar as 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 um SCRIPT página na página e pode ser executado sob demanda ou em resposta a um evento no DOM.
Você pode chamar quaisquer funções de script, você pode definir em uma página HTML usando o InvokeScript método. Se o método de script retorna um elemento HTML, você pode usar uma conversão para converter esse resultado de retorno para uma HtmlElement. Para detalhes e exemplos de código, consulte InvokeScript.