Partilhar via


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 FORMantes 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