Comparing objects with IDispatch to get main frame only (BHO)

Posted by shaimagz on Stack Overflow See other posts from Stack Overflow or by shaimagz
Published on 2010-03-07T23:53:44Z Indexed on 2010/03/08 0:01 UTC
Read the original article Hit count: 386

Filed under:
|

I don't know if anyone familiar with BHO (Browser Helper Object), but an expert in c++ can help me too.

In my BHO I want to run the OnDocumentComplete() function only on the main frame - the first container and not all the Iframes inside the current page. (an alternative is to put some code only when this is the main frame).

I can't find how to track when is it the main frame that being populated.

After searching in google I found out that each frame has "IDispatch* pDisp", and I have to compare it with a pointer to the first one.

This is the main function:

STDMETHODIMP Browsarity::SetSite(IUnknown* pUnkSite)
{
    if (pUnkSite != NULL)
    {
        // Cache the pointer to IWebBrowser2.
        HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);
        if (SUCCEEDED(hr))
        {
            // Register to sink events from DWebBrowserEvents2.
            hr = DispEventAdvise(m_spWebBrowser);
            if (SUCCEEDED(hr))
            {
                m_fAdvised = TRUE;
            }
        }
    }
    else
    {
        // Unregister event sink.
        if (m_fAdvised)
        {
            DispEventUnadvise(m_spWebBrowser);
            m_fAdvised = FALSE;
        }

        // Release cached pointers and other resources here.
        m_spWebBrowser.Release();
    }

    // Call base class implementation.
    return IObjectWithSiteImpl<Browsarity>::SetSite(pUnkSite);
}

This is where I want to be aware whether its the main window(frame) or not:

void STDMETHODCALLTYPE Browsarity::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
  // as you can see, this function get the IDispatch *pDisp which is unique to every frame.
  //some code
}

I asked this question on Microsoft forum and I got an answer without explaining how to actually implement that: http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/7c433bfa-30d7-42db-980a-70e62640184c

© Stack Overflow or respective owner

Related posts about c++

Related posts about bho