描述:
我在网页中内嵌了一个自己写的ActiveX控件,在该ActiveX中,需要下载一个数据文件,该数据文件是和页面文件位于同一目录中的。
现在我用URLDownloadToFile,结果发现只能使用绝对路径,用相对路径时找不到文件。所以,我想获得ActiveX所在页面的URL,然后自己生成绝对路径。
请问,我该怎么获得这个URL,或者这个页面的文档对象?谢谢。
解决方案1:
在OnSetClientSite里调用此方法
CString CMyActiveXCtrl::getURL()
{
CString url="";
IWebBrowser2 *browser = NULL;
HRESULT hr = S_OK;
IServiceProvider *isp, *isp2 = NULL;
if (!m_pClientSite)
{
return "";
}
else
{
hr = m_pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if (FAILED(hr))
{
hr = S_OK;
return url;
}
hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
if (FAILED(hr))
{
m_pClientSite->Release();
hr = S_OK;
return url;
}
hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
if (FAILED(hr))
{
m_pClientSite->Release();
isp->Release();
hr = S_OK;
return url;
}
BSTR str;
browser->get_LocationURL(&str);
CString text(str);
url=text;
m_pClientSite->Release();
isp->Release();
isp2->Release();
}
return url;
}
留出ACTIVEX接口,通过JS来得到URL然后传给ACTIVEX控件.