在将浏览器地址引用到代理之前捕获它

时间:2011-12-29 13:02:14

标签: c++ windows http bho

我正在编写一个BHO(浏览器帮助对象),它捕获用户输入的地址检查它,并且取决于结果执行cretin操作。

BHO挂钩浏览器事件,然后我抓住DISPID_BEFORENAVIGATE2事件并做我的事情。

我的问题是我们的用户都有一个内部代理服务器,有时会在发生这种情况时阻止网站我在DISPID_BEFORENAVIGATE2事件中获得的地址是代理返回的地址,当我真正需要的地址是用户键入的地址时英寸

任何人都知道在我被提到代理人之前我怎么能抓住地址?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。 我从浏览器对象获取URL,所以我实际得到的是显示的页面,因为代理消息是重定向,它从未显示过,所以我从未见过它。

我现在已经切换到从DISPID_BEFORENAVIGATE2参数中获取URL:

LPTSTR CBhoApp::varToStr(VARIANT var)
{
    USES_CONVERSION;
    if(var.vt == VT_BSTR)
    {
        LPTSTR psz = new TCHAR[SysStringLen(var.bstrVal)];
        lstrcpy(psz, OLE2T(var.bstrVal));
        return psz;
    }
    else
        return NULL;
}
STDMETHODIMP CBhoApp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{

    BSTR bstrUrlName;
    LPTSTR psz;
    if(dispidMember == DISPID_BEFORENAVIGATE2)
    {
        //This is the parameter for the URL.
        VARIANT* tmp = pDispParams->rgvarg[5].pvarVal;
        psz = varToStr(*tmp);
        .
        .
        .
    }
}