Доступ к членам управляемой объектной модели документов HTML, доступ к которым не предоставляется явно
Управляемая объектная модель (DOM) HTML-документов содержит класс с именем HtmlElement, предоставляющий свойства, методы и события, общие для всех элементов HTML. Иногда, однако, требуется доступ к членам, которые управляемый интерфейс не предоставляет непосредственно. В этом разделе рассматриваются два способа получения доступа к членам, не предоставленным явно, включая JScript и функции языка сценариев VBScript, определенные внутри веб-страницы.
Доступ с помощью управляемых интерфейсов к членам, не предоставленным явно
HtmlDocument и HtmlElement предоставляют четыре метода обеспечения доступа к членам, не предоставленным явно. В следующей таблице приведены типы и соответствующие методы.
Тип члена |
Методы |
---|---|
Свойства (HtmlElement) |
|
Методы |
|
События (HtmlDocument) |
|
События (HtmlElement) |
|
События (HtmlWindow) |
При использовании этих методов предполагается, что имеется элемент правильного базового типа. Предположим, что требуется ожидать передачи данных от события 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 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
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");
}
}
}
}
Доступ к неуправляемым интерфейсам
Доступ к членам управляемой модели HTML DOM, не предоставляемым явно, также можно получить с помощью интерфейса неуправляемой модели COM, предоставляемого каждым классом DOM. Этот способ рекомендуется, если требуется выполнить несколько вызовов членов, не предоставленных явно, или если члены, не предоставленные явно, возвращают неуправляемые интерфейсы, не упакованные в управляемую модель HTML DOM.
В следующей таблице приведены все неуправляемые интерфейсы, предоставляемые через управляемую модель HTML DOM. Чтобы получить описание использования и пример кода, щелкните соответствующую ссылку.
Тип |
Неуправляемый интерфейс |
---|---|
Самым простым способом использования интерфейсов модели COM является добавление ссылки из приложения на библиотеку неуправляемой модели HTML DOM (MSHTML.dll). .NET Framework 2.0 содержит основную сборку взаимодействия, предоставляющую неуправляемые вызовы как управляемые методы; в предыдущих версиях .NET Framework управляемую оболочку нужно было создавать самостоятельно. Дополнительные сведения о добавлении ссылки на проект содержатся в разделах Основные сборки взаимодействия и Импорт библиотеки типов в виде сборки.
Функции доступа к скрипту
HTML-страница может определять одну или несколько функций с помощью скриптового языка, такого как JScript или VBScript. Эти функции размещаются внутри страницы SCRIPT на странице и могут выполняться по запросу или в ответ на событие в модели DOM.
Используя метод InvokeScript, можно вызвать любую функцию скрипта, определенную в HTML-странице. Если метод скрипта возвращает элемент HTML, можно использовать приведение, чтобы преобразовать этот возвращаемый результат в HtmlElement. Дополнительные сведения и пример кода содержатся в разделе InvokeScript.