Exemplo n.º 1
0
BOOL CAutoBrowser::GetWebWindowScroll(LONG *pX,LONG *pY)
{
	BOOL bGetRes = FALSE;
	do 
	{
		CComQIPtr<IWebBrowser> pWb(m_pWebBrowser);
		if (pWb == NULL)
		{
			break;
		}

		CComQIPtr<IHTMLDocument2> pDoc2;
		pWb->get_Document((IDispatch **)&pDoc2);
		if (pDoc2 == NULL)
		{
			break;
		}

		CComQIPtr<IHTMLDocument3> pDoc3(pDoc2);
		if (pDoc3 == NULL)
		{
			break;
		}

		CComQIPtr<IHTMLElement> pDoc3Elem;
		pDoc3->get_documentElement(&pDoc3Elem);
		if (pDoc3Elem == NULL)
		{
			break;
		}

		CComQIPtr<IHTMLElement2> pDoc3Elem2(pDoc3Elem);
		if(pDoc3Elem2 == NULL)
		{
			break;
		}

		if(pY)
		{
			pDoc3Elem2->get_scrollTop(pY);
		}
		if(pX)
		{
			pDoc3Elem2->get_scrollLeft(pX);
		}

		bGetRes = TRUE;

	} while (FALSE);

	return bGetRes;

}
void CEventSink::AttachEvent(IDispatch *pDisp)
{
	CComQIPtr<IWebBrowser2> pBrowser(pDisp);
	if (! pBrowser)
	{
		Debug::Warn("Could not retrieve IWebBrowser2");
		return;
	}

	CComPtr<IDispatch> pUnk = NULL;
	HRESULT hr = pBrowser->get_Document(&pUnk);
	if (FAILED(hr) || pUnk == NULL)
	{
		Debug::Warn("get_Document failed");
		return;
	}

	CComQIPtr<IHTMLDocument2> pHtmlDoc2(pUnk);
	if (! pHtmlDoc2)
	{
		Debug::Warn("Could not retrieve IHTMLDocument2");
		return;
	}

	if (Page::Modify::ShouldModify(pHtmlDoc2, rules) == FALSE)
	{
		Debug::Log("Do not attach event");
		return;
	}


	CComQIPtr<IHTMLWindow2> pWindow2;
	hr = pHtmlDoc2->get_parentWindow((IHTMLWindow2**) &pWindow2);
	if(FAILED(hr))
	{
		Debug::Warn("Could not get pWindow2");
		return;
	}

	CComQIPtr<IHTMLWindow3> pWindow3(pWindow2);
	if(! pWindow3)
	{
		Debug::Warn("Could not get pWindow3");
		return;
	}


	CComQIPtr<IHTMLDocument3> pDoc3(pHtmlDoc2);
	if(! pDoc3)
	{
		Debug::Warn("Could not create pDoc3");
		return;
	}

	VARIANT_BOOL result = VARIANT_TRUE;
	CComBSTR onEvent(TEXT("onreadystatechange")); // DOMContentLoaded onclick onload onreadystatechange

	if (pDomEvent != NULL)
	{
		delete pDomEvent;
		pDomEvent = NULL;
	}
	pDomEvent = new Page::DOMLoaded(pBrowser, rules);

	hr = pDoc3->attachEvent(onEvent, pDomEvent, &result); // DOMContentLoaded FAIL
	//pDoc3->detachEvent(onEvent, pDomEvent);
	//hr = pWindow3->attachEvent(onEvent, pDomEvent, &result); // onload OK

	if(FAILED(hr))
	{
		Debug::Error("Error in attachEvent result");
		return;
	}
	if (result != VARIANT_TRUE )
	{
		Debug::Error("Error in attachEvent result");
		return;
	}
}