Uzyskiwanie dostępu do nieujawnionych elementów w modelu DOM (Document Object Model) zarządzanych dokumentów HTML

Zarządzany model obiektów dokumentów HTML (DOM) zawiera klasę o nazwie HtmlElement , która uwidacznia właściwości, metody i zdarzenia wspólne dla wszystkich elementów HTML. Czasami jednak konieczne będzie uzyskanie dostępu do elementów członkowskich, których interfejs zarządzany nie uwidacznia bezpośrednio. W tym temacie opisano dwa sposoby uzyskiwania dostępu do nieeksponowanych elementów członkowskich, w tym funkcji JScript i VBScript zdefiniowanych wewnątrz strony sieci Web.

Uzyskiwanie dostępu do nieeksponowanych elementów członkowskich za pośrednictwem interfejsów zarządzanych

HtmlDocument i HtmlElement udostępniają cztery metody, które umożliwiają dostęp do nieeksponowanych elementów członkowskich. W poniższej tabeli przedstawiono typy i odpowiadające im metody.

Typ elementu członkowskiego Metody
Właściwości (HtmlElement) GetAttribute

SetAttribute
Metody InvokeMember
Zdarzenia (HtmlDocument) AttachEventHandler

DetachEventHandler
Zdarzenia (HtmlElement) AttachEventHandler

DetachEventHandler
Zdarzenia (HtmlWindow) AttachEventHandler

DetachEventHandler

W przypadku korzystania z tych metod zakłada się, że masz element poprawnego typu bazowego. Załóżmy, że chcesz nasłuchiwać Submit zdarzenia FORM elementu na stronie HTML, aby można było wykonać pewne wstępne przetwarzanie wartości FORMprzed przesłaniem ich do serwera przez użytkownika. W idealnym przypadku, jeśli masz kontrolę nad kodem HTML, zdefiniuj FORM element , aby mieć unikatowy ID atrybut.

<HTML>  
  
    <HEAD>  
        <TITLE>Form Page</TITLE>  
    </HEAD>  
  
    <BODY>  
        <FORM ID="form1">  
             ... form fields defined here ...  
        </FORM>  
    </BODY>  
  
</HTML>  

Po załadowaniu tej strony do kontrolki WebBrowser możesz użyć GetElementById metody , aby pobrać FORM element w czasie wykonywania przy użyciu form1 jako argumentu.

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

Uzyskiwanie dostępu do niezarządzanych interfejsów

Można również uzyskać dostęp do nieeksponowanych elementów członkowskich w zarządzanym modelu DOM HTML przy użyciu niezarządzanych interfejsów modelu obiektów składników (COM) udostępnianych przez każdą klasę DOM. Jest to zalecane, jeśli musisz wykonać kilka wywołań względem nieeksponowanych elementów członkowskich lub jeśli nieeksponowane elementy członkowskie zwracają inne niezarządzane interfejsy, które nie są opakowane przez zarządzany dom HTML.

W poniższej tabeli przedstawiono wszystkie niezarządzane interfejsy uwidocznione za pośrednictwem zarządzanego modelu DOM HTML. Kliknij każdy link, aby uzyskać wyjaśnienie użycia i na przykład kod.

Type Niezarządzany interfejs
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

Najprostszym sposobem użycia interfejsów COM jest dodanie odwołania do niezarządzanej biblioteki DOM HTML (MSHTML.dll) z aplikacji, chociaż nie jest to obsługiwane.

Uzyskiwanie dostępu do funkcji skryptu

Strona HTML może definiować jedną lub więcej funkcji przy użyciu języka skryptowego, takiego jak JScript lub VBScript. Te funkcje są umieszczane wewnątrz SCRIPT strony na stronie i mogą być uruchamiane na żądanie lub w odpowiedzi na zdarzenie w modelu DOM.

Możesz wywołać dowolne funkcje skryptu zdefiniowane na stronie HTML przy użyciu InvokeScript metody . Jeśli metoda script zwraca element HTML, możesz użyć rzutowania, aby przekonwertować ten wynik zwracany na HtmlElement. Aby uzyskać szczegółowe informacje i przykładowy kod, zobacz InvokeScript.

Zobacz też