私はCOMとIEのアーキテクチャについて十分に知っているだけで危険です。私はこれに似た作業C#.NET ActiveXコントロールを持っている:IEの.NET ActiveXコンポーネント - ブラウザの参照を取得する方法
using System;
using System.Runtime.InteropServices;
using BrowseUI;
using mshtml;
using SHDocVw;
using Microsoft.Win32;
namespace CTI
{
public interface CTIActiveXInterface
{
[DispId(1)]
string GetMsg();
}
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CTIActiveX : CTIActiveXInterface
{
/*** Where can I get a reference to SHDocVw.WebBrowser? *****/
SHDocVw.WebBrowser browser;
public string GetMsg()
{
return "foo";
}
}
}
私が登録して作成します。regasmを使用して、タイプライブラリを:
regasm CTIActiveX.dll /tlb:CTIActiveXNet.dll /codebase
し、正常にJavaScriptでこれをインスタンス化することができます
var CTIAX = new ActiveXObject("CTI.CTIActiveX");
alert(CTIAX.GetMsg());
を
CTIActiveX内のクライアントサイト(ブラウザウィンドウ)への参照を取得するにはどうすればよいですか?私はIObjectWithSiteを実装してBHOでこれを行っていますが、これはActiveXコントロールの正しいアプローチではないと思います。 Javascriptでインスタンス化しようとすると、CTIActiveXのインターフェース(IObjectWithSiteのようなCOMインターフェースを意味する)を実装すると、オブジェクトが自動化をサポートしていないというエラーが発生します。
は、これは、同じGetPropertyメソッドとPutPropertyがSHDocVw.WebBrowserがないことを公開SHDocVw.InternetExplorerへの参照を取得します別の問題で私を助ける答え。しかし、それは私が探しているものではありません。 IHTMLDocument2.parentWindowは、SHDocVw.WebBrowserではなくmshtml.IHTMLWindow2を返します。 私はSHDocVw.WebBrowserを探していますので、BHOと通信するためにGetPropertyメソッドとPutPropertyメソッドにアクセスできます。 –
また、明らかなように、問題の例が機能します。私の例のように実装クラスがComVisibleを指定している場合、ComVisible(true)は必要ではないようです。 IObjectWithSiteなどのCOMインターフェイスを明示的に実装した場合にのみ機能します。 –