マネージド HTML DOM (Document Object Model) の非公開メンバーへのアクセス

マネージド HTML ドキュメント オブジェクト モデル (DOM) には、すべての HTML 要素で共通して保有されているプロパティ、メソッド、イベントを公開する、HtmlElement というクラスが含まれています。 ただし、マネージド インターフェイスで直接公開されないメンバーにアクセスすることが必要になる場合があります。 このトピックでは、Web ページ内で定義されている JScript と VBScript の関数を含む、非公開メンバーにアクセスする 2 つの方法について説明します。

マネージド インターフェイスを使用した非公開メンバーへのアクセス

HtmlDocumentHtmlElement には、非公開メンバーへのアクセスを可能にする 4 つのメソッドが用意されています。 次の表に、型とそれに対応するメソッドを示します。

メンバーの型 メソッド
プロパティ (HtmlElement) GetAttribute

SetAttribute
メソッド InvokeMember
イベント (HtmlDocument) AttachEventHandler

DetachEventHandler
イベント (HtmlElement) AttachEventHandler

DetachEventHandler
イベント (HtmlWindow) AttachEventHandler

DetachEventHandler

これらのメソッドを使用する際には、基になる適切な型の要素があることを前提としています。 たとえば、ユーザーがサーバーに送信する前に、FORM の値に対していくつかの事前処理を実行できるように、HTML ページ上の FORM 要素の Submit イベントをリッスンするとします。 理想としては、HTML を制御できる場合は、一意の FORM 属性を持つように ID を定義します。

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

このページを WebBrowser コントロールに読み込んだ後は、GetElementById メソッドを使用して form1 を引数として使用することで、実行時に 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 を通じて公開されるすべてのアンマネージド インターフェイスを示します。 各リンクをクリックして、その使用法とコード例の説明を確認してください。

種類 アンマネージド インターフェイス
HtmlDocument DomDocument
HtmlElement DomElement
HtmlWindow DomWindow
HtmlHistory DomHistory

COM インターフェイスを使用する最も簡単な方法は、アプリケーションからアンマネージド HTML DOM ライブラリ (MSHTML.dll) への参照を追加することです。ただし、この方法はサポートされていません。

スクリプト関数へのアクセス

HTML ページでは、JScript や VBScript などのスクリプト言語を使用して、1 つ以上の関数を定義できます。 これらの関数はそのページの SCRIPT ページ内に配置され、必要に応じて、または DOM 上のイベントに応じて実行できます。

HTML ページで定義したスクリプト関数は、InvokeScript メソッドを使用して呼び出すことができます。 スクリプト メソッドによって HTML 要素が返される場合は、キャストを使用してこの返される結果を HtmlElement に変換できます。 詳細とコード例については、InvokeScript を参照してください。

関連項目