次の方法で共有


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

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

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

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

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

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

DetachEventHandler
イベント (HtmlElement) AttachEventHandler

DetachEventHandler
イベント (HtmlWindow) AttachEventHandler

DetachEventHandler

これらのメソッドを使用する場合は、正しい基になる型の要素があることを前提としています。 ユーザーがサーバーに送信する前にSubmitの値に対して事前処理を実行できるように、HTML ページ上のFORM要素の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 クラスによって公開されるアンマネージ コンポーネント オブジェクト モデル (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を参照してください。

こちらも参照ください