Sdílet prostřednictvím


Přístup k nevyexponovaným členům ve spravovaném objektovém modelu dokumentu HTML

Spravovaný objektový model DOKUMENTU HTML (DOM) obsahuje třídu s názvem HtmlElement, která zveřejňuje vlastnosti, metody a události, které mají všechny elementy HTML společné. Někdy ale budete potřebovat přístup k členům, které spravované rozhraní přímo nezpřístupňuje. Toto téma zkoumá dva způsoby přístupu k nevyexponovaným členům, včetně funkcí JScript a VBScript definovaných uvnitř webové stránky.

Přístup k nevyexponovaným členům prostřednictvím spravovaných rozhraní

HtmlDocument a HtmlElement poskytují čtyři metody, které umožňují přístup k nevyexponovaným členům. Následující tabulka uvádí typy a jejich odpovídající metody.

Typ členu Metody
Vlastnosti (HtmlElement) GetAttribute

SetAttribute
Metody InvokeMember
Události (HtmlDocument) AttachEventHandler

DetachEventHandler
Události (HtmlElement) AttachEventHandler

DetachEventHandler
Události (HtmlWindow) AttachEventHandler

DetachEventHandler

Při použití těchto metod se předpokládá, že máte prvek správného základního typu. Předpokládejme, že chcete sledovat událost Submit prvku FORM na stránce HTML, abyste mohli před odesláním hodnot FORMuživatelem na server provést určité předzpracování. V ideálním případě, pokud máte kontrolu nad HTML, měli byste FORM přiřadit jedinečný atribut ID.

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

Po načtení této stránky do ovládacího prvku WebBrowser můžete použít metodu GetElementById ke získání FORM za běžícího času pomocí 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

Přístup k nespravovaným rozhraním

K neexponovaným členům ve spravovaném modelu HTML DOM můžete přistupovat také pomocí nespravovaných rozhraní MODELU COM (Component Object Model) vystavených jednotlivými třídami MODELU DOM. Doporučuje se to, pokud musíte provést několik volání vůči neexponovaným členům, nebo pokud neexponovaní členové vrátí další nespravovaná rozhraní, která nejsou zabalena spravovaným HTML DOM.

Následující tabulka ukazuje všechna nespravovaná rozhraní vystavená prostřednictvím spravovaného MODELU HTML DOM. Kliknutím na každý odkaz zobrazíte vysvětlení jejího použití a například kódu.

Typ Nespravované rozhraní
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

Nejjednodušší způsob, jak používat rozhraní COM, je přidat odkaz na nespravovanou knihovnu HTML DOM (MSHTML.dll) z vaší aplikace, přestože to není podporováno.

Přístup ke skriptovacím funkcím

Stránka HTML může definovat jednu nebo více funkcí pomocí skriptovacího jazyka, jako je JScript nebo VBScript. Tyto funkce jsou umístěny uvnitř stránky SCRIPT na stránce a lze je spustit na vyžádání nebo v reakci na událost na modelu DOM.

Pomocí metody InvokeScript můžete volat libovolné funkce skriptu, které definujete na stránce HTML. Pokud metoda skriptu vrátí HTML element, můžete pomocí přetypování převést výsledek vrácený na HtmlElement. Podrobnosti a ukázkový kód viz InvokeScript.

Viz také