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

  

转载于:https://www.cnblogs.com/browserplugins/p/3623658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值