已经搞定
不过能否在IE的DownloadComplete事件中得到HTML源码?
我是在DOCUMENTCOMPLETE事件中得到HTML源的.
难道没有高手吗?

解决方案 »

  1.   

    ipxspx,如何取到的,教我一教
      

  2.   

    你取到的原码和"View Source"的不一样吧?
      

  3.   

    问题:: 怎么得到 iframe 或者 frame的 IHTMLDocument2对象指针
    看看这个!
      

  4.   

    MSDN上不是有详细的例子吗?就是那个关于BHOs的
      

  5.   

    综合参考msdn及有关书籍,并无数次试验//响应DOCUMENTCOMPLETE:事件
    HRESULT GetDHtmlObject(IDispatch *lpTopDisp)
    {
       
    HRESULT hr ;
    CComPtr<IDispatch> pDisp;
    LPDISPATCH lpWBDisp; //m_spWebBrowser2为IE的指针

    if (m_spWebBrowser2)
    {
    //取得IE的文档指针
    hr = m_spWebBrowser2->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
    //将下载的文档指针同IE的文档指针比较,如果不同可能是下载的frame或图片
    if (lpWBDisp!=lpTopDisp)
    { //退出
    return S_OK;
    }
    //取得Document对象
    hr=m_spWebBrowser2->get_Document(&pDisp);
    if (hr==S_OK)
    {   //是HTML对象
    spHTML = pDisp; BSTR bstrHTML;
    CString strHtml;
    IHTMLElement *pBody;
    //取文档的URL
    hr=spHTML->get_URL(&bstrHTML);
    if (hr==S_OK)
    {
    strHtml=bstrHTML; //AfxMessageBox(strHtml);
    }
    //检验是不是http协议
    if(strHtml.Left(7)=="http://" )
    {
    strmsg=strHtml+ "\r\n";  //取文档title
    hr=spHTML->get_title(&bstrHTML);
    if (S_OK==hr)
    {
    strHtml=bstrHTML;
    strmsg+=strHtml;
    SysFreeString(bstrHTML);
    //AfxMessageBox(strHtml);
    }
    //取文档body
    hr=spHTML->get_body(&pBody);
    if (S_OK==hr)
    {
    pBody->get_innerHTML(&bstrHTML);
    pBody->Release(); strHtml=bstrHTML;
    SysFreeString(bstrHTML);
    if (strHtml.GetLength()>=20 )
    strmsg+=strHtml;
    else
    strmsg="";

    //AfxMessageBox(strHtml);

    }
    else
    {
    strmsg="";
    }

    } } 
    else
    {
    // disable the Code Window controls
    // AfxMessageBox("not html"); } } return hr;

         
    }
      

  6.   

    to: mickeyx(alanet.51.net) 回复于2002-1-16 14:51:13      
    你取到的原码和"View Source"的不一样吧?  取到的原码和"View Source"的一样to bskay(bskay) 回复于2002-1-16 14:54:05      
    怎么得到 iframe 或者 frame的 IHTMLDocument2对象指针
     
    把hr = m_spWebBrowser2->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
            //将下载的文档指针同IE的文档指针比较,如果不同可能是下载的frame或图片
            if (lpWBDisp!=lpTopDisp)
            {    //退出
                return S_OK;
            }
    去掉就可以了