如何 :在ActiveX控件中获得顶层IWebBrowser2接口

原创 2001年08月28日 23:56:00

本文翻译自http://support.microsoft.com/kb/257717

如何: 在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)/ 
	if (ptr != NULL) {/ 
		ptr->Release();/ 
		ptr = NULL;/	
	}

IWebBrowser2 *browser = NULL;

STDMETHODIMP SetClientSite(IOleClientSite *pClientSite) 
{
	HRESULT hr = S_OK;
	IServiceProvider *isp, *isp2 = NULL;
	if (!pClientSite)
	{
		COMRELEASE(browser);
	}  
	else
	{
		hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
		if (FAILED(hr)) 
		{
			hr = S_OK;
			goto cleanup;
		}
		hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
		if (FAILED(hr))
		{
			hr = S_OK;
			goto cleanup;
		}
		hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
		if (FAILED(hr)) 
		{
			hr = S_OK;
			goto cleanup;
		}
	cleanup:
		// Free resources.
		COMRELEASE(isp);
		COMRELEASE(isp2);
		return hr;
	}
} 


参考

要更多信息,单击下面的文档编号查看微软知识库中的文章

Q172763 信息: 在ActiveX中访问对象模型
要更多关于开发基于Web的Internet Explorer解决方案,请访问下列站点:
http://msdn.microsoft.com/workshop/entry.asp

http://msdn.microsoft.com/ie/

http://support.microsoft.com/highlights/iep.asp?FR=0&SD=MSDN

© 微软公司 2000,保留所有权利

微软公司的Jay Andrew Allen 投稿

额外的查询关键字:IServiceProvider SID_STopLevelBrowser IWebBrowser2

关键字: kbActiveX kbCtrl kbIE kbIE400 kbGrpDSInet kbie500 kbDSupport kbie501 kbie550 
文章类型 : kbhowto 
技术 : kbIEsearch kbAudDeveloper kbSDKIESearch kbIE500Search kbSDKIE400 kbSDKIE401 kbSDKIE401SP1 kbSDKIE401SP2 kbSDKIE500 kbSDKIE501 kbSDKIE550 kbIE550Search


上次更新: 2001年7月21日

如何: 在ActiveX 控件中获得顶层 IWebBrowser2 接口

此文章的信息应用于:Microsoft Internet Explorer (编程) 版本4.0, 4.01, 4.01 SP1, 4.01 SP2, 5, 5.01, 5.5 转者注:http...
  • shybt
  • shybt
  • 2011年01月09日 14:09
  • 1103

如何 :在ActiveX控件中获得顶层IWebBrowser2接口

本文翻译自http://support.microsoft.com/kb/257717如何: 在ActiveX 控件中获得顶层 IWebBrowser2 接口此文章的信息应用于:Microsoft...
  • hejishan
  • hejishan
  • 2008年03月11日 11:16
  • 245

ATL获取嵌入ActiveX控件的页面IWebBrowser2指针

在ActiveX控件中获取顶级的页面IWebBrowser2指针CComPtr spClientSite;hr = GetClientSite(&spClientSite);if (SUCCEEDED...
  • hqulyc
  • hqulyc
  • 2010年05月13日 14:05
  • 2797

ACTIVEX浏览器控件如何防止弹出脚本错误

转载自:http://xjchilli.blog.163.com/blog/static/4534773920108188450277/ 在IE浏览器浏览网页时经常遇到脚本错误,IE的处理方法是...
  • caijun12358098
  • caijun12358098
  • 2012年03月20日 10:14
  • 1013

通过窗口句柄获得 IWebBrowser2 接口源码

 通过窗口句柄获得 IWebBrowser2 接口源码function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;varh...
  • iseekcode
  • iseekcode
  • 2009年10月29日 08:27
  • 1128

ActiveX(MFC)控件——添加接口及WEB调用

上一节实现了控件在页面中的加载及界面显示,这一节开始在上一节的基础上添加接口供WEB调用。 手动在CMainDlg.h中添加一方法: public:          LONG SetParam...
  • z526882183
  • z526882183
  • 2016年04月14日 19:29
  • 1226

ActiveX控件的基本操作方法以及如何在VS2010下使用控件

在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册)...
  • u014028070
  • u014028070
  • 2014年08月07日 20:32
  • 2088

Excel中的窗体控件和ActiveX控件

几个关键点:用对象浏览器F2进行查看,虽然代码不会自动提示,但是仍然可以调用。  From:http://www.vbafan.com/2009/01/21/excel-form-controls-a...
  • peachpi
  • peachpi
  • 2009年09月10日 09:43
  • 2818

ActiveX控件安全初始化之一:实现ISafeObject接口

转自:http://www.cnblogs.com/carekee/articles/1772201.html ActiveX控件打包成cab后,在脚本中调用中时,要保证控件的安全性才能...
  • rankun1
  • rankun1
  • 2016年06月22日 17:29
  • 1437

使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用

上一节实现了控件在页面中的加载及界面显示,这一节开始在上一节的基础上添加接口供WEB调用。 手动在CMainDlg.h中添加一方法: public:          LONG SetPar...
  • haoxingfeng
  • haoxingfeng
  • 2014年04月28日 21:15
  • 3045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何 :在ActiveX控件中获得顶层IWebBrowser2接口
举报原因:
原因补充:

(最多只允许输入30个字)