Uzyskiwanie dostępu do nieujawnionych elementów w modelu DOM (Document Object Model) zarządzanych dokumentów HTML
Zarządzany kod HTML Document Object Model (DOM) HtmlElement zawiera klasę o nazwie , która uwidacznia właściwości, metody i zdarzenia, które mają wspólne elementy HTML. Czasami jednak trzeba będzie uzyskać dostęp do elementów członkowskich, których interfejs zarządzany nie uwidacznia bezpośrednio. W tym temacie o przeanalizowano dwa sposoby uzyskiwania dostępu do niewyświetlanych elementów członkowskich, w tym JScript i funkcje języka VBScript zdefiniowane wewnątrz strony internetowej.
Uzyskiwanie dostępu do niewyświetlanych elementów członkowskich za pomocą interfejsów zarządzanych
HtmlDocument i HtmlElement zapewniają cztery metody, które umożliwiają dostęp do niewyświetlanych 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 o poprawnym typie bazowym. Załóżmy, SubmitFORM że chcesz nasłuchiwać zdarzenia elementu na stronie HTML, FORMaby można było wykonać wstępne przetwarzanie wartości elementu przed przesłaniem ich do serwera. Najlepiej, jeśli masz kontrolę nad kodem HTML, zdefiniuj FORM obiekt , aby miał 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 GetElementByIdFORM użyć metody , aby pobrać dane w czasie działania przy użyciu 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
Uzyskiwanie dostępu do interfejsów niezamanagedowych
Możesz również uzyskać dostęp do niewyświetlanych składowych w zarządzanym modelu DOM HTML przy użyciu interfejsów modelu COMPONENT OBJECT MODEL (COM) ujawnionych przez każdą klasę DOM. Jest to zalecane, jeśli musisz wykonać kilka wywołań względem niewyświetlanych elementów członkowskich lub jeśli niewyświetlone elementy członkowskie zwracają inne niezamanageowane interfejsy, które nie są opakowane przez zarządzany model DOM HTML.
W poniższej tabeli przedstawiono wszystkie niezamaniowane interfejsy udostępniane za pośrednictwem zarządzanego modelu DOM HTML. Kliknij każdy link, aby uzyskać wyjaśnienie jego użycia i na przykład kodu.
| Typ | Interfejs niezamanagedowany |
|---|---|
| HtmlDocument | DomDocument |
| HtmlElement | DomElement |
| HtmlWindow | DomWindow |
| HtmlHistory | DomHistory |
Najprostszym sposobem korzystania z interfejsów COM jest dodanie z aplikacji odwołania do nieza zarządzania biblioteką HTML DOM (MSHTML.dll), chociaż nie jest to obsługiwane. Aby uzyskać więcej informacji, zobacz Artykuł bazy wiedzy 934368.
Uzyskiwanie dostępu do funkcji skryptu
Strona HTML może definiować co najmniej jedną funkcję 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, które definiujesz na stronie HTML, przy użyciu InvokeScript metody . Jeśli metoda script zwraca element HTML, można użyć rzutowania, aby przekonwertować ten zwracany wynik na HtmlElement. Aby uzyskać szczegółowe informacje i przykładowy kod, zobacz InvokeScript.