次の方法で共有


マネージド HTML ドキュメント オブジェクト モデルでの非公開メンバーへのアクセス

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

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

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

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

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

DetachEventHandler
イベント (HtmlElement) AttachEventHandler

DetachEventHandler
イベント (HtmlWindow) AttachEventHandler

DetachEventHandler

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

<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 上のイベントに応答して実行できます。

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

関連項目

  • マネージド HTML ドキュメント オブジェクト モデルの使用