Поделиться через


Доступ к членам управляемой объектной модели документов 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 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. Чтобы получить описание использования и пример кода, щелкните соответствующую ссылку.

Тип

Неуправляемый интерфейс

HtmlDocument

DomDocument

HtmlElement

DomElement

HtmlWindow

DomWindow

HtmlHistory

DomHistory

Самым простым способом использования интерфейсов модели COM является добавление ссылки из приложения на библиотеку неуправляемой модели HTML DOM (MSHTML.dll). .NET Framework 2.0 содержит основную сборку взаимодействия, предоставляющую неуправляемые вызовы как управляемые методы; в предыдущих версиях .NET Framework управляемую оболочку нужно было создавать самостоятельно. Дополнительные сведения о добавлении ссылки на проект содержатся в разделах Основные сборки взаимодействия и Импорт библиотеки типов в виде сборки.

Функции доступа к скрипту

HTML-страница может определять одну или несколько функций с помощью скриптового языка, такого как JScript или VBScript. Эти функции размещаются внутри страницы SCRIPT на странице и могут выполняться по запросу или в ответ на событие в модели DOM.

Используя метод InvokeScript, можно вызвать любую функцию скрипта, определенную в HTML-странице. Если метод скрипта возвращает элемент HTML, можно использовать приведение, чтобы преобразовать этот возвращаемый результат в HtmlElement. Дополнительные сведения и пример кода содержатся в разделе InvokeScript.

См. также

Другие ресурсы

Использование управляемой объектной модели HTML-документов