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 FORM
už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é
.NET Desktop feedback