のMSDNドキュメントには、オブジェクトaddEventListener
の形式でコールバック関数を受け入れると書かれています。IDispatch *
C# (私は COM 相互運用機能を使用しています) から、Visual Studio はパラメーターの型を単に として表示しますobject
。
インターフェイスなどを探しましたが、IEventListener
見つかりませんでした。何を渡せばいいですか?
のMSDNドキュメントには、オブジェクトaddEventListener
の形式でコールバック関数を受け入れると書かれています。IDispatch *
C# (私は COM 相互運用機能を使用しています) から、Visual Studio はパラメーターの型を単に として表示しますobject
。
インターフェイスなどを探しましたが、IEventListener
見つかりませんでした。何を渡せばいいですか?
調べてみると、これらの COM 接続ポイント (イベント ハンドラー) は で指定されていることがわかりましたDispId(0)
。コールバック関数は、次のようなクラスのインスタンスによって表されます。
// These attributes may be optional, depending on the project configuration.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class EventListener
{
[DispId(0)]
// The "target" parameter is an implementation detail.
public void NameDoesNotMatter(object target, IDOMEvent evt) { ... }
}
呼び出すデフォルトのメソッドを指定するためDispId(0)
、メソッドの実際の名前は重要ではありません。ただし、メソッドのパラメーターは確かに重要です。たとえば、 にIHTMLElement.onclick
は引数のないコールバックを割り当てる必要がありますが、IHTMLElement2.attachEvent
は型IHTMLEventObj
(またはIHTMLEventObj2
、...、6
、または のみ) の 1 つのパラメーターを持つコールバックを受け取りますobject
。
要約すると、COMIDispatch
コールバックは、正しい引数を受け取り、注釈が付けられたメソッドを持つ COM 可視クラスを使用して、C# で実装できます[DispId(0)]
。
これらすべてにもかかわらず、ブラウザーが互換性のために下位ドキュメント モードを使用している場合、IE9 DOM オブジェクトはこのメソッドをサポートしないため、W3C DOM Events API を回避するソリューションがより適切である可能性があります。たとえば、 を使用する拡張機能addEventListener
は、IE7 モードでレンダリングされる Bing などのページでは失敗します。
IWebBrowser2
また、F12 開発者ツールを使用して手動で行う以外に、インスタンスで使用されるドキュメント モードを設定することもできないようです。