Uzyskiwanie dostępu do nieujawnionych elementów w modelu DOM (Document Object Model) zarządzanych 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 elementów członkowskich, których interfejs zarządzany nie uwidacznia bezpośrednio. W tym temacie opisano dwa sposoby uzyskiwania dostępu do nieeksponowanych elementów członkowskich, w tym funkcji JScript i VBScript zdefiniowanych wewnątrz strony sieci Web.
Uzyskiwanie dostępu do nieeksponowanych elementów członkowskich za pośrednictwem interfejsów zarządzanych
HtmlDocument i HtmlElement udostępniają cztery metody, które umożliwiają dostęp do nieeksponowanych elementów członkowskich. W poniższej tabeli przedstawiono typy i odpowiadające im metody.
Typ elementu członkowskiego | Metody |
---|---|
Właściwości (HtmlElement) | GetAttribute SetAttribute |
Metody | InvokeMember |
Zdarzenia (HtmlDocument) | AttachEventHandler DetachEventHandler |
Zdarzenia (HtmlElement) | AttachEventHandler DetachEventHandler |
Zdarzenia (HtmlWindow) | AttachEventHandler DetachEventHandler |
W przypadku korzystania z tych metod zakłada się, że masz element poprawnego typu bazowego. Załóżmy, że chcesz nasłuchiwać Submit
zdarzenia FORM
elementu na stronie HTML, aby można było wykonać pewne wstępne przetwarzanie wartości FORM
przed przesłaniem ich do serwera przez użytkownika. W idealnym przypadku, jeśli masz kontrolę nad kodem HTML, zdefiniuj FORM
element , aby mieć unikatowy ID
atrybut.
<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ć GetElementById metody , aby pobrać FORM
element 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.
Type | Niezarządzany interfejs |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
Najprostszym sposobem użycia 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 SCRIPT
strony 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 InvokeScript metody . Jeśli metoda script zwraca element HTML, możesz użyć rzutowania, aby przekonwertować ten wynik zwracany na HtmlElement. Aby uzyskać szczegółowe informacje i przykładowy kod, zobacz InvokeScript.
Zobacz też
.NET Desktop feedback