Udostępnij za pośrednictwem


Uzyskiwanie dostępu do nieeksponowanych elementów członkowskich w zarządzanym modelu obiektów 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 członków, które nie są bezpośrednio udostępniane przez zarządzany interfejs. W tym temacie bada się dwa sposoby uzyskiwania dostępu do nieeksponowanych elementów członkowskich, w tym funkcji JScript i VBScript zdefiniowanych wewnątrz strony internetowej.

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

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

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

SetAttribute
Metody InvokeMember
Zdarzenia (HtmlDocument) AttachEventHandler

DetachEventHandler
Zdarzenia (HtmlElement) AttachEventHandler

DetachEventHandler
Zdarzenia (HtmlWindow) AttachEventHandler

DetachEventHandler

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

<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ć metody GetElementById, aby pobrać FORM 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.

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

Najprostszym sposobem korzystania z 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 strony SCRIPT 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 metody InvokeScript. Jeśli metoda script zwraca element HTML, możesz użyć rzutowania, aby zmienić tę wartość zwracaną na HtmlElement. Aby uzyskać szczegółowe informacje i przykładowy kod, zobacz InvokeScript.

Zobacz też