Доступ к скрытым элементам в управляемой объектной модели HTML-документа
Управляемая объектная модель HTML-документа (DOM) содержит класс с именем HtmlElement, предоставляющий свойства, методы и события, которые имеют все элементы HTML. Иногда, однако, может потребоваться доступ к элементам, которые интерфейс управления не предоставляет напрямую. В этом разделе рассматриваются два способа получения доступа к недоступным членам, такие как функции JScript и VBScript, определенные внутри вебстраницы.
Доступ к закрытым элементам через управляемые интерфейсы
HtmlDocument и HtmlElement предоставляют четыре метода, которые обеспечивают доступ к неэкспонированным членам. В следующей таблице показаны типы и соответствующие методы.
Тип члена | Методы |
---|---|
Свойства (HtmlElement) | GetAttribute SetAttribute |
Методика | InvokeMember |
События (HtmlDocument) | AttachEventHandler DetachEventHandler |
События (HtmlElement) | AttachEventHandler DetachEventHandler |
События (HtmlWindow) | AttachEventHandler DetachEventHandler |
При использовании этих методов предполагается, что у вас есть элемент правильного базового типа. Предположим, что вы хотите прослушивать событие Submit
элемента FORM
на HTML-странице, чтобы можно было выполнить предварительную обработку значений FORM
перед отправкой пользователем на сервер. В идеале, если у вас есть возможность управлять HTML, вы могли бы задать для FORM
уникальный атрибут ID
.
<HTML>
<HEAD>
<TITLE>Form Page</TITLE>
</HEAD>
<BODY>
<FORM ID="form1">
... form fields defined here ...
</FORM>
</BODY>
</HTML>
После загрузки этой страницы в элемент управления WebBrowser можно использовать метод GetElementById для получения FORM
во время выполнения, используя form1
как аргумент.
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
Доступ к неуправляемых интерфейсам
Кроме того, вы можете получить доступ к скрытым членам HTML DOM под управлением с использованием неуправляемых интерфейсов COM, предоставляемых различными классами DOM. Это рекомендуется, если вам нужно выполнить несколько вызовов для неподдерженных членов или если неподдерженные члены возвращают другие неуправляемые интерфейсы, не упакованные управляемым HTML-DOM.
В следующей таблице показаны все неуправляемые интерфейсы, предоставляемые с помощью управляемого HTML-DOM. Щелкните каждую ссылку для объяснения его использования и примера кода.
Тип | Неуправляемый интерфейс |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
Самый простой способ использовать COM-интерфейсы — добавить ссылку на неуправляемую библиотеку DOM HTML (MSHTML.dll) из приложения, хотя это не поддерживается.
Доступ к функциям скриптов
HTML-страница может определить одну или несколько функций с помощью языка сценариев, например JScript или VBScript. Эти функции размещены на странице внутри секции SCRIPT
и могут выполняться по мере необходимости или в ответ на событие в DOM.
Вы можете вызывать любые функции скрипта, определенные на HTML-странице, с помощью метода InvokeScript. Если метод скрипта возвращает элемент HTML, можно использовать приведение для преобразования этого возвращаемого результата в HtmlElement. Дополнительные сведения и пример кода см. в InvokeScript.
См. также
.NET Desktop feedback