Sdílet prostřednictvím


Přístup k nevystaveným členům v modelu spravovaného objektu dokumentu HTML

Spravovaný objektový model DOKUMENTU HTML (DOM) obsahuje třídu, 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 naslouchat Submit události FORM elementu na stránce HTML, abyste mohli před odesláním uživatele na server provést určité předběžné zpracování FORMhodnot. V ideálním případě, pokud máte kontrolu nad HTML, byste definovali FORM , aby měl jedinečný ID atribut.

<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 WebBrowser ovládacího prvku můžete použít GetElementById metodu FORM k načtení za běhu pomocí form1 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. To se doporučuje, pokud potřebujete provést několik volání vůči neexponovaným členům nebo pokud neexponované členy vrátí další nespravovaná rozhraní, která nejsou zabalena spravovaným kódem 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.

Type 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, i když 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ř SCRIPT stránky na stránce a mohou být spuštěny na vyžádání nebo v reakci na událost na modelu DOM.

Pomocí metody můžete volat všechny funkce skriptu, které definujete na stránce InvokeScript HTML. Pokud metoda skriptu vrátí HTML element, můžete použít přetypování převést tento návratový výsledek na .HtmlElement Podrobnosti a ukázkový kód najdete v tématu InvokeScript.

Viz také