Доступ к членам управляемой объектной модели документов HTML, доступ к которым не предоставляется явно
Управляемая модель DOM HTML содержит класс 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
Доступ к неуправляемых интерфейсам
Вы также можете получить доступ к непредоставляемым членам в управляемой модели DOM HTML с помощью неуправляемых интерфейсов модели COM, предоставляемых каждым классом модели DOM. Такой подход рекомендован в случае, если нужно выполнить несколько вызовов к непредоставляемым членам или если непредоставляемые члены возвращают другие неуправляемые интерфейсы, не заключенные в управляемую модель DOM HTML.
В следующей таблице показаны все неуправляемые интерфейсы, предоставляемые с помощью управляемой модели DOM HTML. Щелкните любую из ссылок для ознакомления с пояснениями по использованию и примером кода.
Тип | Неуправляемый интерфейс |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
Самый простой способ использовать COM-интерфейсы заключается в том, чтобы добавить ссылку на неуправляемую библиотеку модели DOM HTML (MSHTML.dll) из своего приложения, хотя это не поддерживается.
Доступ к функциям скриптов
HTML-страница может определять одну или несколько функций с помощью скриптового языка, такого как JScript или VBScript. Эти функции размещаются внутри страницы SCRIPT
на странице и могут выполняться по запросу или в ответ на событие в модели DOM.
С помощью метода InvokeScript можно вызывать любые функции скриптов, определенные на HTML-странице. Если метод скрипта возвращает элемент HTML, можно использовать приведение, чтобы преобразовать такой возвращаемый результат в HtmlElement. Дополнительные сведения и пример кода см. в описании InvokeScript.
См. также
.NET Desktop feedback