다음을 통해 공유


관리되는 HTML 문서 개체 모델의 노출되지 않은 멤버에 액세스

관리형 HTML DOM(문서 개체 모델)은 모든 HTML 요소가 공통적으로 가지는 속성, 메서드 및 이벤트를 노출시키는 HtmlElement라는 클래스를 포함합니다. 그러나, 관리형 인터페이스가 직접 노출시키지 않는 멤버에 액세스해야 하는 경우도 있습니다. 이 항목에서는 웹 페이지 내에 정의된 JScript 및 VBScript 함수를 포함하여, 노출되지 않은 멤버에 액세스하는 두 가지 방법을 살펴봅니다.

관리형 인터페이스를 통해 노출되지 않은 멤버 액세스

HtmlDocumentHtmlElement는 노출되지 않은 멤버에 액세스할 수 있는 네 가지 메서드를 제공합니다. 다음 표에서는 유형과 유형의 해당 메서드를 보여줍니다.

멤버 형식 메서드
속성(HtmlElement) GetAttribute

SetAttribute
메서드 InvokeMember
이벤트(HtmlDocument) AttachEventHandler

DetachEventHandler
이벤트(HtmlElement) AttachEventHandler

DetachEventHandler
이벤트(HtmlWindow) AttachEventHandler

DetachEventHandler

이러한 메서드를 사용할 때 올바른 기본 유형의 요소가 있다고 가정합니다. HTML 페이지에 있는 FORM 요소의 Submit 이벤트를 수신하여, 사용자가 FORM의 값을 서버에 제출하기 전에 이들 값에 어떤 전처리를 수행할 수 있기를 원한다고 가정하세요. 이상적으로, HTML에 대해 제어할 수 있다면 FORM을 정의하여 고유한 ID 특성을 가집니다.

<HTML>  
  
    <HEAD>  
        <TITLE>Form Page</TITLE>  
    </HEAD>  
  
    <BODY>  
        <FORM ID="form1">  
             ... form fields defined here ...  
        </FORM>  
    </BODY>  
  
</HTML>  

이 페이지를 WebBrowser 컨트롤에 로드하면, form1를 인수로 사용하는 런타임 시 GetElementById 메서드를 사용하여 FORM를 검색할 수 있습니다.

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 클래스에서 노출되는 비관리형 COM(구성 요소 개체 모델) 인터페이스를 사용하여 관리형 HTML DOM에서 노출되지 않은 멤버에 액세스할 수도 있습니다. 이 방법은 노출되지 않은 멤버에 대해 여러 차례 호출해야 하거나, 노출되지 않은 멤버가 관리형 HTML DOM에 의해 래핑되지 않은 다른 비관리형 인터페이스를 반환하는 경우에 권장됩니다.

다음 표에서는 관리형 HTML DOM을 통해 노출되는 모든 비관리형 인터페이스를 보여줍니다. 사용량에 대한 설명과 코드 예를 보려면 각 링크를 클릭하세요.

Type 비관리형 인터페이스
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

COM 인터페이스를 사용하는 가장 쉬운 방법은 애플리케이션에서 비관리형 HTML DOM 라이브러리(MSHTML.dll)에 대한 참조를 추가하는 것이지만, 지원되지는 않습니다.

스크립트 함수 액세스

HTML 페이지는 JScript 또는 VBScript와 같은 스크립팅 언어를 사용하여 하나 이상의 함수를 정의할 수 있습니다. 이러한 함수는 페이지의 SCRIPT 페이지 내에 놓이며,요구 시 또는 DOM에서 이벤트에 대한 응답으로 실행될 수 있습니다.

InvokeScript 메서드를 사용하여 HTML 페이지에서 정의하는 스크립트 함수를 호출할 수 있습니다. 스크립트 메서드가 HTML 요소를 반환하는 경우, 캐스트를 사용하여 이 반환 결과를 HtmlElement로 변환할 수 있습니다. 자세한 내용 및 예제 코드를 보려면 InvokeScript를 참조하세요.

참고 항목