pop-up manager and the webbrowser control


If you are hosting the webbrowser control, here is how you interact with IE’s pop-up manager:


Implement INewWindowManager (beta documentation; not final).  This should be implemented by the same object that implements IDocHostUIHandler.


When mshtml detects a new window is being requested, it will call INWM::EvaluateNewWindow().  Here is some boiler-plate for you:


I do not want pop-up management


This is the easy case, since pop-up management is opt-in.  Simply do nothing.  The webbrowser control will query you for INWM.  If the query fails, no pop-up management will occur.


I just want the same pop-up management that IE has


This is easy too.  Simply implement INWM::ENW() and return E_NOTIMPL:


CMyObject::EvaluateNewWindow(…)
{
        return E_NOTIMPL;
}


When the webbrowser control sees the failure code, it will fall back to the default pop-up management.


I want to implement my own logic


Implement INWM::ENW() and use the parameters to decide whether or not to block the new window.  Return S_FALSE to block the window and S_OK to allow it:


CMyObject::EvaluateNewWindow(…)
{
        HRESULT hr = S_OK;


        if (/* your logic here */)
        {
                hr = S_FALSE;
        }
        else if (/* more of your logic here */)
        {
                hr = S_FALSE;
        }                
        // … and so on …


        // Now update your UI.
        switch(hr)
        {
        case S_OK:
                OnPopupNotBlocked(…);
                break;
                       
        case S_FALSE:
                OnPopupBlocked(…);
                break;
        }


        return hr;
}

Comments (0)