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 FORM
przed 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ż
.NET Desktop feedback