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