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


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

См. также