标题多搞几个关键词
方式1:
我在DISPID_DOCUMENTCOMPLETE事件中
a.AtlAdvise(pHtmlWin,(IDispatch*)this,DIID_HTMLWindowEvents2,&dwEvent);抓取对应的DISPID_HTMLWINDOWEVENTS2_ONUNLOAD 事件,但是IHTMLEventObj::get_srcElement对应的获取的是空值或者
b.
AtlAdvise(pHtmlWin,(IDispatch*)this,DIID_HTMLDocumentEvents2,&dwEvent);抓取对应的DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE
 事件,但是IHTMLEventObj::get_srcElement对应的获取的是空值方式2:
http://www.codeproject.com/KB/IP/detecting_the_ie_refresh.aspx
缺点,如果有框架或者iframe则不知道是哪个页面发出的刷新

解决方案 »

  1.   

    IE的刷新针对的是根文档,即IWebBrowser::QueryInterface(IID_IHTMLDocument2, &pDoc);得到的文档,里面的frame全部都一起刷新。刷新后所有的文档指针可能都变了,你应该连接DWebBrowserEvents2::DocumentComplete事件,重新获取文档接口
      

  2.   

    我知道呀
    但是刷新的时候根本就没有DocumentComplete事件了
    而且不是顶层的iframe也是可以刷新的
      

  3.   

    刷新对应的是:
    DISPID_DOWNLOADCOMPLETE
      

  4.   

    HRESULT CViewSource::Invoke(DISPID dispidMember, 
    REFIID riid, 
    LCID lcid, 
    WORD wFlags,
    DISPPARAMS* pDispParams, 
    VARIANT* pvarResult,
    EXCEPINFO*  pExcepInfo,  
    UINT* puArgErr)
    {
       if (!pDispParams)
          return E_INVALIDARG;
     
       // Document complete
       if (dispidMember == DISPID_DOCUMENTCOMPLETE)
       {
       GetDocumentContent();
       m_bDocumentCompleted = true;
       }   // Download complete (to catch refresh and F5)
       if (dispidMember == DISPID_DOWNLOADCOMPLETE)
       if (m_bDocumentCompleted)
    GetDocumentContent();   // Quit
       if (dispidMember == DISPID_ONQUIT)
    OnQuit();   return S_OK;
    }
      

  5.   

    DISPID_DOWNLOADCOMPLETE不知道是哪个frame 发出的
    有框架或者iframe就不灵了
      

  6.   

    遍历根doc下的所有的frame,针对每个frame的window都建立事件连接
      

  7.   

    连接DIID_HTMLWindowEvents2?
    获取DISPID_DOCUMENTCOMPLETE?
    刷新的时候没有代号为DISPID_DOCUMENTCOMPLETE的
    DISPID_DOWNLOADCOMPLETE倒是有,但是不能区分哪个IFRAME发出的
      

  8.   

    刷新一个页面,则该页面中的iframe都会收到documentcomplete事件,那么对每个页面都插入一个iframe,documentcomplete的时候判断是不是插入的iframe如果是的话,则认为iframe的上一级页面是所要获取的,结果失败了