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


Доступ к скрытым элементам в управляемой объектной модели 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.

См. также