Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: И снова о Navigate2 в составе BHO  (Прочитано 6146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tomek
Гость
« : 30-06-2005 15:16 » 

Здравствуйте, уважаемые господа!
Уж не знаю, пару дней назад мой вопрос то ли показался слишком сложным, то ли я неясно его объяснил. У меня назрел вот какой.
Гляньте на вот этот код :

void CSuperHook::BeforeNavigate2(IDispatch* pDisp,
    VARIANT* url,
    VARIANT* Flags,
    VARIANT* TargetFrameName,
    VARIANT* PostData,
    VARIANT* Headers,
    VARIANT* Cancel){
   
  BSTR bstrUrl = GetBSTR(url);
  BSTR target = GetBSTR(TargetFrameName);
 
  if (!bstrUrl) return;

  if (!target && (_wcsnicmp(bstrUrl,L"http",4) == 0)) // cancel it, and redo it
  {
     CComPtr<IWebBrowser2> pWeb2;
     if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(void**)&pWeb2)))
     {
        // cancel navigation
        *Cancel->pboolVal = VARIANT_TRUE;
        // create param
        VARIANT frame;
        frame.vt = VT_BSTR;
        frame.bstrVal = SysAllocString(L"_blank");
        // do it
        pWeb2->Stop();
        pWeb2->Navigate2(url,Flags,&frame,PostData,Headers);
        // clean up
        SysFreeString(frame.bstrVal);
      }
  }
  else if (wcsncmp(bstrUrl,L"about:blank",11) == 0)
  {
    CComPtr<IWebBrowser2> pWeb2;
    if (SUCCEEDED(pDisp->QueryInterface(IID_IWebBrowser2,(void**)&pWeb2)))
    {
        // cancel navigation
        *Cancel->pboolVal = VARIANT_TRUE;

        VARIANT frame,url2;
        frame.vt = VT_BSTR;
        frame.bstrVal = SysAllocString(L"_blank");
        url2.vt = VT_BSTR;
        url2.bstrVal = SysAllocString(bstrUrl+11);
        // do it
        pWeb2->Stop();
        pWeb2->Navigate2(&url2,Flags,&frame,PostData,Headers);
        // clean up
        SysFreeString(frame.bstrVal);
        SysFreeString(url2.bstrVal);
    }
  }

}


Почему у меня при попытке навигации по определенному адресу в IE6 открывается новое окно и навигация в нем идет по вот этой бяке :
res://C:\WINNT\system32\shdoclc.dll/navcancl.htm Не понял
Или я в коде чего-то не понимаю или как ? кажется, явно указано :


        pWeb2->Stop();
        pWeb2->Navigate2(url,Flags,&frame,PostData,Headers); // go to specific address
        // clean up
Кажется, Navigate2 никак не рабоает............
Записан
NetRaider
Гость
« Ответ #1 : 05-07-2005 05:13 » new

После этого
url2.bstrVal = SysAllocString(bstrUrl+11);
url2 точно содержит правильный адрес ?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines