【发布时间】:2013-08-09 14:00:37
【问题描述】:
我正在为 Internet Explorer 开发自定义工具栏(添加了一个工具栏按钮)。 我在 COM 中编写了代码。 当用户单击我的工具栏按钮时,我需要在新选项卡中打开一个 URL。我编写了如下导航功能。此函数在新标签页中打开 URL 失败,总是返回 E_FAIL。
HRESUTL Navigate(CString csUrl) {
ATLASSERT(0 <= Url.Length());
ATLASSERT(m_pWebBrowser);
if (m_pWebBrowser == NULL) {
return E_FAIL;
}
m_pWebBrowser->Stop();
VARIANT vUrl;
vUrl.vt = VT_BSTR;
vUrl.bstrVal = csUrl.AllocSysString();
VARIANT vFlag;
vFlag.vt = VT_I4;
vFlag.intVal = navOpenInNewTab;
VARIANT vEmpty;
VariantInit(&vEmpty);
HRESULT hr = m_pWebBrowser->Navigate2(&vUrl, &vFlag, &vEmpty, &vEmpty, &vEmpty);
if (hr == E_OUTOFMEMORY)
MessageBox(NULL, L"Out of Memory.", L"Navigate", MB_OK);
else if (hr == E_INVALIDARG || hr == E_FAIL)
MessageBox(NULL, L"Failed to navigate.", L"Navigate", MB_OK);
::SysFreeString(vUrl.bstrVal);
ATLASSERT(SUCCEEDED(hr));
return hr; }
我需要为“Navigate2”方法传递哪些参数才能在新标签页中打开 URL。
请在这方面给我建议。
问候, 桑托什
【问题讨论】:
-
您应该在顶级浏览器对象 (SID_STopLevelBrowser) 上调用 Navigate。回答了类似的问题here。
-
我尝试使用顶级浏览器对象。还是同样的问题。我正在使用 IE 8。
-
@Noseratio 我按照您的建议尝试了获取顶级浏览器对象。但仍然是同样的问题。我正在使用 IE 8。
-
您的分机是 BHO 吗?您首先如何获得
m_pWebBrowser?显示更多代码。
标签: c++ visual-c++