0

.NET WebBrowserコントロールを使用すると、次のことができます。

WebBrowser1.ObjectForScripting = new a_class();

ここで、a_classはとして宣言され[ComVisible(True)]ます。

その後、のインスタンスはa_class、の名前でページ内のjavascriptにアクセスできますwindow.external

VB6 / VBA WebBrowser OCXコントロールで同じことを実現するにはどうすればよいですか?

設定する直接のプロパティは明らかにありません。

オブジェクトがあり、両方ともありません(ページ WebBrowser1.Document.parentWindowがロードされている場合)が、後者に何かのインスタンスを割り当てると、次のようになります。WebBrowser1.Document.parentWindow.externalnull

ランタイムエラー445
オブジェクトはこのアクションをサポートしていません。

それを除外するために、私は渡したいクラスにインターフェースを実装さIObjectSafetyせましたが、それは何もしませんでした(IObjectSafetyメンバーは呼び出されません)。

parentWindow.externalまた、TypeLib情報を使用して既存のオブジェクトを検査してみました。ClassClassInfoFromObject「自動化または必要なインターフェースをサポートしていません」でInterfaceInfoFromObject失敗し、「添え字が範囲外です」で失敗します。

4

1 に答える 1

0

これは、VB6 で行うのは簡単ではありません。IDocHostUIHandlerコントロールのサイト オブジェクトにインターフェイスを実装し、 fromメソッドWebBrowserを返す必要があります。サイト オブジェクトは VB6 フォームによって提供されるため、VB6 のサイト オブジェクトの(一部の) カスタム実装を提供するには、それをフックする必要があります。IDispatchGetExternalQueryInterfaceIUnknownIDocHostUIHandler

これは、私が少し前に行った実装の直接コピー/貼り付けです: https://gist.github.com/wqweto/5065624

VBOleGuids3別のプロジェクトとしてコンパイルするには、typelib とコードのクリーンアップが少し必要です。

于 2013-03-01T16:11:34.243 に答える