1. 程式人生 > >網址攔截和彈出視窗的遮蔽

網址攔截和彈出視窗的遮蔽

STDMETHODIMP CIEPlugCom::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
 USES_CONVERSION;
 
 if(!pDispParams)
  return E_INVALIDARG;
 
 LPOLESTR lpURL=NULL;
 m_spWebBrowser2->get_LocationURL(&lpURL); 
 switch(dispidMember)
 {
 case DISPID_BEFORENAVIGATE2:
  char *pURL;
  if(pDispParams->cArgs >=5&&pDispParams->rgvarg[5].vt==(VT_BYREF|VT_VARIANT))
  {
            CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
            varURL.ChangeType(VT_BSTR);
   //轉化要訪問的網址為char *型
   pURL=OLE2A(varURL.bstrVal);
  }
  //如果正要訪問的網址為要被攔截的,則停止  
  //IDS_URL
  if(strstr(pURL,"microsoft.com")!=NULL)
  {
            *pDispParams->rgvarg[0].pboolVal=TRUE;
      MessageBox(NULL,"當前系統禁止瀏覽該頁","警告",MB_ICONSTOP);
   return S_OK;
  }
  break;
 case DISPID_NAVIGATECOMPLETE2:
  break;
 case DISPID_DOCUMENTCOMPLETE:
  break;
 case DISPID_DOWNLOADBEGIN:
  break;
 case DISPID_DOWNLOADCOMPLETE:
  break;
 case DISPID_NEWWINDOW2:
  READYSTATE m_ReadyState;
        m_spWebBrowser2->get_ReadyState(&m_ReadyState);
        if(m_ReadyState!=READYSTATE_COMPLETE)
        {
            *pDispParams->rgvarg[0].pboolVal=TRUE;
            return S_OK;
        }
  else
  {
            *pDispParams->rgvarg[0].pboolVal=FALSE;
            return S_OK;
  }
     break;
 case DISPID_QUIT:
  break;
 default:
  break;
 }
 return S_OK;
}