0

使用 .NET WebBrowser 控件,我们可以:

WebBrowser1.ObjectForScripting = new a_class();

wherea_class被声明为[ComVisible(True)].

之后,a_class页面中名为 的 javascript 可以访问该实例window.external

如何使用 VB6/VBA WebBrowser OCX 控件实现相同的功能?

显然没有要设置的直接属性。

有和对象,两者都没有 假设页面已加载),但是将某物的实例分配给后者会导致WebBrowser1.Document.parentWindowWebBrowser1.Document.parentWindow.externalnull

运行时错误 445
对象不支持此操作。

只是为了排除它,我让我想要传递的类实现了IObjectSafetyinterface,但这没有做任何事情(IObjectSafety甚至没有调用成员)。

parentWindow.external我还尝试使用 TypeLib Information检查现有对象。ClassClassInfoFromObject因“不支持自动化或所需接口”InterfaceInfoFromObject而失败,因“下标超出范围”而失败。

4

1 回答 1

0

这在 VB6 中并不容易做到。IDocHostUIHandler您必须在控件的站点对象上实现接口WebBrowser并返回IDispatchfromGetExternal方法。站点对象由 VB6 表单提供,因此您必须对其进行挂钩QueryInterface以提供(某些) VB6 站点对象的IUnknown自定义实现。IDocHostUIHandler

这是我前段时间执行的直接复制/粘贴:https ://gist.github.com/wqweto/5065624

您需要VBOleGuids3typelib 和一些代码清理才能使其编译为单独的项目。

于 2013-03-01T16:11:34.243 回答