Обработка события DISPID_NAVIGATEERROR
От: REASY  
Дата: 06.05.11 08:32
Оценка:
Доброго времени суток.
Столкнулся с проблемой. Плагин для IE, мониторит url, по которым ходит пользователь. Нужно реализовать следующее: Если переходят на сервер, которого нет(не reslov'иться)(допустим, askdkalsjdlkasdklaklsdklasd.ru), то перехватить это и вместо показа стандартной страницы об ошибке(или переход на autosearch), перенаправить пользователя, допустим, на http://blablabla.ru
Вот такой код пишу:
STDMETHODIMP CPlugin::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, 
                             WORD wFlags,
                             DISPPARAMS* pDispParams, VARIANT* pvarResult,
                             EXCEPINFO*  pExcepInfo,  UINT* puArgErr)
{
.....
switch (dispidMember)
{
   ....
   case DISPID_NAVIGATEERROR:
   {
      IDispatch* pDisp = pDispParams->rgvarg[4].pdispVal;
      url = SafeGetString(pDispParams->rgvarg[3].pvarVal);
      targetFrameName = SafeGetString(pDispParams->rgvarg[2].pvarVal);
      dwStatusCode = SafeGetLongVal(pDispParams->rgvarg[1].pvarVal);
   
      bool isMain = m_spWebBrowser.IsEqualObject(pDisp);
      TR(L"DISPID_NAVIGATEERROR %d, url=%ls, target frame=%ls", dwStatusCode, url.c_str(),     targetFrameName.c_str());
    if (dwStatusCode == INET_E_RESOURCE_NOT_FOUND)
    {
       // не кидать на страницу поиска
       *(((*pDispParams).rgvarg)[0].pboolVal) = VARIANT_TRUE;
       // нужного эффекта ниже написанный код не дает, то есть 
       // на http://blablabla.ru не перекидывает.
       CComPtr<IWebBrowser2> spBrowser;
       pDisp->QueryInterface(IID_IWebBrowser2, (void**)&spBrowser);

       spBrowser->Navigate(L"http://blablabla.ru", NULL, NULL, NULL, NULL);
   }    
.....
}
}

Что не так делаю?
dispid_navigateerror
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.