case DISPID_BEFORENAVIGATE2:

char *str;
// if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT))
// {
 //           CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
 //           varURL.ChangeType(VT_BSTR);
//转化要访问的网址为char *型
if  (s1t!=1)
{
                char surl[] = "http://www.csdn.net/";
                        CComVariant vaURL( ( CComBSTR) surl);
                        VARIANT vtFlags;
                        vtFlags.vt = VT_I4;
                        vtFlags.lVal = navOpenInNewWindow;

                        m_spWebBrowser2->Navigate2( &vaURL,&vtFlags ,
                        NULL,
                        NULL,
                        NULL
                        );        
str=surl;
s1t=1;
}
// }//m_spWebBrowser2->Navigate2(&CComVariant(str1),&vtEmpty,&vtEmpty,&vtEmpty,&vtEmpty);
 
//如果正要访问的网址为要被拦截的,则stop
if(strstr(str,"happysky")!=NULL)
{
            *pDispParams->rgvarg[0].pboolVal = TRUE;
    MessageBox(NULL,"当前系统禁止浏览该页","警告",MB_ICONSTOP);
return S_OK;
}我写了个拦截网站的bho试试
然后想让dll在第一次加载的时候跳到csdn的网站
if  (s1t!=1)
{
                char surl[] = "http://www.csdn.net/";
                        CComVariant vaURL( ( CComBSTR) surl);
                        VARIANT vtFlags;
                        vtFlags.vt = VT_I4;
                        vtFlags.lVal = navOpenInNewWindow;

                        m_spWebBrowser2->Navigate2( &vaURL,&vtFlags ,
                        NULL,
                        NULL,
                        NULL
                        );        
str=surl;
s1t=1;
}
这个代码可以弹出新窗口,
可是我不想弹出,而是在原本的页面跳转
但是把vtFlags.lVal = navOpenInNewWindow;注释掉
就不能打开ie了,请问这里要怎么做?

解决方案 »

  1.   

    VARIANT vtFlags; 
    vtFlags.vt = VT_I4; 
    vtFlags.lVal = navOpenInNewWindow
    你这个就是让新窗口打开嘛~要在自己中打开:
    char surl[] = "http://www.csdn.net/"; 
    CComVariant vaURL( ( CComBSTR) surl); 
    _variant_t varTargetFrameName = _T("_self");
    m_spWebBrowser2->Navigate2( &vaURL,&vtFlags , 
                            &varTargetFrameName , 
                            NULL, 
                            NULL 
                            ); 
      

  2.   

    vtFlags.lVal = navNoReadFromCache;
    试试,其实只要不指定navOpenInNewWindow就可以了
      

  3.   

    其实都不是啦nav2不好改我用nav1完成了vtFlags.lVal = navNoReadFromCache; 
    试试,其实只要不指定navOpenInNewWindow就可以了
    没用
    不指定连弹都不弹