Dela via


Åtkomst till oexponerade medlemmar i den hanterade HTML-dokumentobjektmodellen

Den hanterade HTML-dokumentobjektmodellen (DOM) innehåller en klass med namnet HtmlElement som exponerar de egenskaper, metoder och händelser som alla HTML-element har gemensamt. Ibland måste du dock komma åt medlemmar som det hanterade gränssnittet inte exponerar direkt. Det här avsnittet undersöker två sätt att komma åt oexponerade medlemmar, inklusive JScript- och VBScript-funktioner som definierats på en webbsida.

Åtkomst till oexponerade medlemmar via hanterade gränssnitt

HtmlDocument och HtmlElement tillhandahåller fyra metoder som ger åtkomst till oexponerade medlemmar. I följande tabell visas typerna och deras motsvarande metoder.

Medlemstyp Metoder
Egenskaper (HtmlElement) GetAttribute

SetAttribute
Metoder InvokeMember
Händelser (HtmlDocument) AttachEventHandler

DetachEventHandler
Händelser (HtmlElement) AttachEventHandler

DetachEventHandler
Händelser (HtmlWindow) AttachEventHandler

DetachEventHandler

När du använder dessa metoder antas det att du har ett element av rätt underliggande typ. Anta att du vill lyssna på Submit-händelsen av ett FORM-element på en HTML-sida, så att du kan utföra vissa förbearbetningar på FORM:s värden innan användaren skickar dem till servern. Idealiskt sett, om du har kontroll över HTML-koden, bör du definiera FORM som har ett unikt ID-attribut.

<HTML>

    <HEAD>
        <TITLE>Form Page</TITLE>
    </HEAD>

    <BODY>
        <FORM ID="form1">
             ... form fields defined here ...
        </FORM>
    </BODY>

</HTML>

När du har laddat in den här sidan i kontrollen WebBrowser kan du använda metoden GetElementById för att vid körning hämta FORM med hjälp av form1 som argument.

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

Åtkomst till ohanterade gränssnitt

Du kan också komma åt oexponerade medlemmar på den hanterade HTML DOM med hjälp av de obearbetade COM-gränssnitten (Component Object Model) som exponeras av varje DOM-klass. Detta rekommenderas om du måste göra flera anrop mot oexponerade medlemmar, eller om de oexponerade medlemmarna returnerar andra ohanterade gränssnitt som inte omsluts av den hanterade HTML DOM.

I följande tabell visas alla ohanterade gränssnitt som exponeras via den hanterade HTML DOM. Klicka på varje länk för att få en förklaring av dess användning och till exempel kod.

Typ Ohanterat gränssnitt
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

Det enklaste sättet att använda COM-gränssnitten är att lägga till en referens till det ohanterade HTML DOM-biblioteket (MSHTML.dll) från ditt program, även om detta inte stöds.

Åtkomst till skriptfunktioner

En HTML-sida kan definiera en eller flera funktioner med hjälp av ett skriptspråk som JScript eller VBScript. Dessa funktioner placeras inuti en SCRIPT sida på sidan och kan köras på begäran eller som svar på en händelse på DOM.

Du kan anropa alla skriptfunktioner som du definierar på en HTML-sida med hjälp av metoden InvokeScript. Om skriptmetoden returnerar ett HTML-element kan du använda en cast för att konvertera det här returresultatet till en HtmlElement. Mer information och exempelkod finns i InvokeScript.

Se även