使用.NET WebBrowser控件,我们可以:
WebBrowser1.ObjectForScripting = new a_class();
其中a_class
被声明为[ComVisible(True)]
。
之后,a_class
的实例可以通过名称window.external
的页面中的javascript访问。
如何使用VB6 / VBA WebBrowser OCX控件实现相同目标?
显然没有直接属性可以设置。
是 WebBrowser1.Document.parentWindow
和WebBrowser1.Document.parentWindow.external
个对象,两者都不是null
(如果页面已加载),但为后者分配了某个实例结果
运行时错误445
对象不支持此操作。
为了排除这一点,我创建了我要通过implement the IObjectSafety
interface的课程,但这没有做任何事情(IObjectSafety
成员甚至没有被调用)。
我还尝试使用TypeLib信息检查现有的parentWindow.external
对象。 ClassClassInfoFromObject
失败并显示“不支持自动化或必需的界面”,InterfaceInfoFromObject
因“下标超出范围”而失败。
答案 0 :(得分:0)
这在VB6中并不容易。您必须在IDocHostUIHandler
控件的网站对象上实现WebBrowser
接口,并从IDispatch
方法返回GetExternal
。站点对象由VB6表单提供,因此您必须在其QueryInterface
上挂钩IUnknown
,以便在VB6的站点对象上提供(某些)IDocHostUIHandler
的自定义实现。
以下是我之前做过的实现的直接复制/粘贴:https://gist.github.com/wqweto/5065624
您需要VBOleGuids3
typelib和一些代码清理才能将其编译为单独的项目。