如何实现让IE只允许上指定的URL,如上了非指定的URL,则关闭或强行让它上指定的URL,给点代码及思路,谢了!!!!

解决方案 »

  1.   

    可能要枚举IE窗口,获得URL,然后判断
      

  2.   

    在Invoke函数里面增加如下代码:
    HRESULT CIEHandle::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
    {
    if( !pDispParams ) {
    return E_INVALIDARG;
    } HRESULT hr = S_OK;
     
    switch(dispidMember)
    {
    case DISPID_BEFORENAVIGATE:
    case DISPID_FRAMEBEFORENAVIGATE:
    {
    USES_CONVERSION; if( pDispParams->cArgs < 0 ) {
    break;
    }
      
    if( pDispParams->rgvarg[5].vt != VT_BSTR ) {
    break;
    } char hrefStr[2048];
    _bstr_t href( pDispParams->rgvarg[5].bstrVal );

    WideCharToMultiByte(CP_OEMCP, WC_COMPOSITECHECK | WC_DISCARDNS | WC_DEFAULTCHAR, (wchar_t *)href, -1, hrefStr, MAX_PATH, NULL, NULL);
    // 如果URL中有中文,建议执行如下代码
    // char ts[MAX_PATH];
    // DWORD dwLen = sizeof(ts);
    // ::InternetCanonicalizeUrl((const char *) hrefStr, ts, &dwLen, ICU_DECODE | ICU_NO_ENCODE);
    // MessageBox( NULL, ts, "", MB_OK );// strcpy( hrefStr, ts );
    // 以禁止网站http://www.sina.com.cn为例
    if( strcmp((const char *)strlwr(hrefStr), "http://www.sina.com.cn") == 0 )
    {
    if(pDispParams->rgvarg[0].vt == (VT_BYREF | VT_BOOL))
    {
    VARIANT_BOOL FAR* pTmp;
    pTmp = pDispParams->rgvarg[0].pboolVal;
    *pTmp = true;
    } m_spWebBrowser2->Stop();
    break;
    }
    }
    break;
    ...
      

  3.   

    http://www.microsoft.com/mind/0598/browhelp.asp