У меня есть устаревшее приложение atl, в котором размещается элемент управления веб-браузером в окне ATL. Я создаю экземпляр клиента для размещения браузера, используя следующую последовательность
CComPtr<IOleObject> spOleObject;
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC, ID_IOleObject,(void**)&spOleObject);
spOleObject->SetClientSite(this);
GetClientRect(&rcClient);
hr = spOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, &msg, this, 0, m_hWnd, &rcClient);
hr = AtlAdvise(m_spWebBrowser, GetUnknown(), DIID_DWebBrowserEvents2, &m_dwCookie);
CComVariant navvar(navurl);
m_spWebBrowser->Navigate2(&navvar, NULL, NULL, NULL, NULL);
Эта последовательность отлично работает для создания начального окна просмотра. Вызов navigation2 работает, и если я смотрю на окно через spy++, у меня есть Shell Embedding -> Shell DocObject View -> Internet Explorer_Server. Когда появляется всплывающее окно (обнаруженное через NewWindow3), я запускаю новое окно и выполняю ту же последовательность кода для нового окна. Во всплывающем окне navigation2 не работает, и когда я смотрю на это новое окно в spy++, у меня просто есть встраивание оболочки. У меня возникает та же проблема, даже если я создаю экземпляр всплывающего окна при запуске, поэтому он вообще не связан с NewWindow3 - кажется, что второй экземпляр веб-элемента управления не создает экземпляр, хотя все вызовы возвращают S_OK.
Эта последовательность отлично работала в IE7, но теперь я использую IE8, и всплывающее окно не работает. Мне явно чего-то не хватает, но я не могу догадаться, что это может быть. Любые предложения будут невероятно полезны.