[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;
}

  

posted @ 2014-03-25 17:31  TMPluginTeam  阅读(169)  评论(0编辑  收藏  举报