[IE][BHO] IE BHO中获取PDF/SWF URL Chain
我们在获取IE URL Chain的时候, 可以根据Web Browser之间的关系去获得Parent Window从而组成完整的Chain。
std::wstring IEWebBrowserHelper::GetParentURLFromWebBrowser(CComQIPtr<IWebBrowser2>& web_browser2) { std::wstring parent_url; HRESULT hr = S_OK; CComPtr<IDispatch> pDisp; hr = web_browser2->get_Document(&pDisp); if (FAILED(hr)) { //BW_LOG("Fail Get Document"); return parent_url; } CComQIPtr<IHTMLDocument2> pDoc2 = pDisp; if (NULL == pDoc2) { //BW_LOG("Fail Query Document"); return parent_url; } CComQIPtr<IHTMLWindow2> pParentWindow2; hr = pDoc2->get_parentWindow(&pParentWindow2); if (FAILED(hr) || NULL == pParentWindow2) { //BW_LOG("Fail Get Parent Window"); return parent_url; } CComQIPtr<IHTMLWindow2> pParentWindow2_A; hr = pParentWindow2->get_parent(&pParentWindow2_A); if (FAILED(hr) || NULL == pParentWindow2_A) { //BW_LOG("Fail Get Parent Window A"); return parent_url; } CComQIPtr<IServiceProvider> spServiceProvider = pParentWindow2_A; if (NULL == spServiceProvider) { //return CComQIPtr<IWebBrowser2>(); return parent_url; } CComQIPtr<IWebBrowser2> pParentWebBrowser2; hr = spServiceProvider->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void**)&pParentWebBrowser2); //return spWebBrws; if(FAILED(hr) || NULL == pParentWebBrowser2) { return parent_url; } CComPtr<IDispatch> pParentDocDisp; hr = pParentWebBrowser2->get_Document(&pParentDocDisp); if (FAILED(hr) || NULL == pParentDocDisp) { //BW_LOG("Fail Get Parent Document"); return parent_url; } // CComQIPtr<IHTMLDocument2> pParentDoc2 = pParentDocDisp; if (NULL == pParentDoc2) { //BW_LOG("Fail Query Document"); return parent_url; } CComBSTR bstrParentUrl; pParentDoc2->get_URL(&bstrParentUrl); parent_url = bstrParentUrl; return parent_url; }