次の方法で共有


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

マネージ HTML DOM (Document Object Model) には、すべての HTML 要素が共有するプロパティ、メソッド、およびイベントを公開する HtmlElement というクラスが含まれています。 しかし、マネージ インターフェイスが直接公開しないメンバーへのアクセスが必要な場合があります。 ここでは、非公開メンバーにアクセスするための 2 つの方法について検討します。非公開メンバーには、Web ページ内部で定義される JScript 関数および VBScript 関数が含まれます。

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

HtmlDocument および HtmlElement は、非公開メンバーへのアクセスを可能にする 4 つのメソッドを提供します。 非公開メンバーの型および対応するメソッドを次の表に示します。

メンバーの型

メソッド

プロパティ (HtmlElement)

GetAttribute

SetAttribute

メソッド

InvokeMember

イベント (HtmlDocument)

AttachEventHandler

DetachEventHandler

イベント (HtmlElement)

AttachEventHandler

DetachEventHandler

イベント (HtmlWindow)

AttachEventHandler

DetachEventHandler

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

<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");
                    }
                }
            }
        }

アンマネージ インターフェイスへのアクセス

各 DOM クラスによって公開されるアンマネージ コンポーネント オブジェクト モデル (COM: Component Object Model) インターフェイスを使用して、マネージ HTML 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 などのスクリプト言語を使用して 1 つ以上の関数を定義できます。 これらの関数は HTML ページの SCRIPT ページの内部に配置され、要求に応じて、または DOM のイベントに応答して実行できます。

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

参照

その他の技術情報

マネージ HTML DOM (Document Object Model) の使用