Posted on 2006-09-05 21:07
凤之焚 阅读(2002)
评论(3) 编辑 收藏 引用 所属分类:
IE相关
IHTMLDocument2* GetDocFromFrame(IHTMLDocument2* pDoc2)
{
CComPtr<IHTMLDocument3> pDoc3;
CComPtr<IHTMLDocument2> pDoc2Frame;
hr = pDoc2->QueryInterface(IID_IHTMLDocument3,(void**)&pDoc3) ;
if(hr==S_OK)
{
CComBSTR bstrName("FRAME");//CComBSTR bstrName("IFRAME");
CComPtr<IHTMLElementCollection> pElemCollFrame;
hr=pDoc3->getElementsByTagName(bstrName,&pElemCollFrame);
if (hr!=S_OK) return NULL;
long pLength;
hr=pElemCollFrame->get_length(&pLength);
if(hr!=S_OK) return NULL;
for(int i=0;i<pLength;i++)
{
IDispatch *pDispFrame=NULL;
CComVariant vIndex=i;
hr=pElemCollFrame->item(vIndex,vIndex,&pDispFrame);
if(hr!=S_OK) continue;
CComPtr<IHTMLElement> pElemFrame;
hr=pDispFrame->QueryInterface(IID_IHTMLElement,(void**)&pElemFrame);
if(hr!=S_OK) continue;
CComPtr<IHTMLFrameBase2> pFrameBase2;
hr=pElemFrame->QueryInterface(IID_IHTMLFrameBase2,(void**)&pFrameBase2);
if(hr!=S_OK) continue;
CComPtr<IHTMLWindow2> pWindow2;
hr=pFrameBase2->get_contentWindow(&pWindow2);
if(hr==S_OK)
{
hr=pWindow2->get_document(&pDoc2Frame);
if (hr==S_OK)
{
return pDoc2Frame;
}
}
}
pDispFrame->Release();
}
return NULL;
}