如何: 在ActiveX 控件中获得顶层 IWebBrowser2 接口
此文章的信息应用于:
- Microsoft Internet Explorer (编程) 版本4.0, 4.01, 4.01 SP1, 4.01 SP2, 5, 5.01, 5.5
概要
微软知识库文章
Q172763 信息:在ActiveX 中访问对象模型
说明了如何在控件中获得所在窗口的IWebBrowser2的引用。但是,开发者实际上经常需要的是饱含框架集的顶层IWebBrowser2的引用。例如,当你在网页载入之前调用statusText() 命令设置状态栏的值时可以用到。因为这个属性对WebBrowser控件无效,所以调用所在框架的IWebBrowser2的函数会产生错误。
更多信息
为获得顶层IWebBrowser2 引用, 从客户站点获取IServiceProvider 并且 执行一个QueryService 操作获取IID_IServiceProvider服务SID_STopLevelBrowser (在Shlguid.h中定义)。对第二个IServiceProvider,执行一个QueryService 获取IID_IWebBrowser2 服务SID_SWebBrowserApp.
干这个的最好的地方是在IOleObject的SetClientSite() 方法里面:
#include <SHLGUID.h>#define COMRELEASE(ptr)