Compartilhar via


Acessando membros não expostos no Document Object Model 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, 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)
Propriedades (HtmlElement) GetAttribute

SetAttribute
Métodos InvokeMember
Eventos (HtmlDocument) AttachEventHandler

DetachEventHandler
Eventos (HtmlElement) AttachEventHandler

DetachEventHandler
Eventos (HtmlWindow) AttachEventHandler

DetachEventHandler

Quando você utiliza esses métodos, supõe-se que tenha um elemento do tipo correto subjacente. Suponha que você queira ouvir o evento Submit de um elemento FORM em uma página HTML, para que você possa executar algum pré-processamento nos valores do FORMantes que o usuário os envie ao servidor. Idealmente, se você tiver controle sobre o HTML, definirá 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 essa 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ê precisar 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) de seu aplicativo, embora isso não tenha suporte.

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 todas as 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, será possível usar uma conversão para converter o resultado retornado para um HtmlElement. Para obter detalhes e código de exemplo, consulte InvokeScript.

Consulte também