activex控件中调用get_Script失败的解决办法
2011-07-08 15:53
441 查看
在项目中,需要从activex中回调javascript所写的函数,之前的做法是:HRESULT hr = S_OK;
IServiceProvider *isp = NULL, *isp2 = NULL;
IOleClientSite* pClientSite = GetClientSite();
IOleContainer* pOleContainer;
if (pClientSite)
{
hr = pClientSite->GetContainer(&pOleContainer);
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of pOleContainer...");
goto CLEANUP;
}
hr = pOleContainer->QueryInterface(IID_IHTMLDocument2,reinterpret_cast <void **> (&m_html_document));
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of m_html_document...");
goto CLEANUP;
}
//hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&isp));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp...");
// goto CLEANUP;
//}
//hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void**>(&isp2));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp2...");
// goto CLEANUP;
//}
////获得浏览器
////hr = isp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}
//hr = m_browser->get_Document((IDispatch**)&m_html_document);
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}
于是在用m_html_document调用get_Script就总是失败,后来得知这种实现的方法不能在有框架的页面中使用,需要改为调用conterner的方法,见上面源码,这样就可以将activex空间嵌套在字框架中使用了。
IServiceProvider *isp = NULL, *isp2 = NULL;
IOleClientSite* pClientSite = GetClientSite();
IOleContainer* pOleContainer;
if (pClientSite)
{
hr = pClientSite->GetContainer(&pOleContainer);
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of pOleContainer...");
goto CLEANUP;
}
hr = pOleContainer->QueryInterface(IID_IHTMLDocument2,reinterpret_cast <void **> (&m_html_document));
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of m_html_document...");
goto CLEANUP;
}
//hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&isp));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp...");
// goto CLEANUP;
//}
//hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void**>(&isp2));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp2...");
// goto CLEANUP;
//}
////获得浏览器
////hr = isp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}
//hr = m_browser->get_Document((IDispatch**)&m_html_document);
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}
于是在用m_html_document调用get_Script就总是失败,后来得知这种实现的方法不能在有框架的页面中使用,需要改为调用conterner的方法,见上面源码,这样就可以将activex空间嵌套在字框架中使用了。
相关文章推荐
- mssql exec xp_cmdshell 调用'CreateProcess'失败解决办法
- “DllRegisterServer的调用失败”问题解决办法
- 对"对DllRegisterServer的调用失败,错误代码为0x8007005"的解决办法
- chrome 中调用 getSVGDocument() 方法返回null 解决办法
- cocod2d-x加载资源失败:get data from file(...)failed的解决办法
- FSO script调用automation报错解决办法 及 导入excel
- 解决Win7下调用capDriverConnect失败的办法
- ubuntu 14.10系统 apt-get_update 失败解决办法
- DllRegisterServer调用失败的解决办法
- Ubuntu系统 apt-get update失败解决办法
- ActiveX控件localhost可以调用,内外网IP不可以的解决办法
- 关于IE11浏览器不能正确调用ActiveX控件的解决办法
- Ubuntu13.10系统 apt-get update失败解决办法
- SQLServer作业调用链接服务器失败解决办法
- SQLServer作业调用链接服务器失败解决办法
- [导入]asp.net 中调用script的alert后 css失效的解决办法
- 在pycharm中调用用caffe的python接口时,import caffe失败的解决办法
- 关于DllRegisterServer的调用失败的问题解决办法
- ServletRequest中getReader()和getInputStream()只能调用一次的解决办法(转)
- “DllRegisterServer的调用失败”问题解决办法(转)