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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблем с IWebBrowser::Navigate2  (Прочитано 8386 раз)
0 Пользователей и 1 Гость смотрят эту тему.
xitca
Гость
« : 24-02-2009 14:35 » 

Привет! Пишу расширение браузера. Не молучается передать сформировать пользовательские заголовки корректно, точнее вроде получается, но на деле оказывается что они не передаются. Вот код, вызываемый по событию BeforeNavigate2:
VARIANT vtHeaders;
V_VT(&vtHeaders) = VT_BSTR;
V_BSTR(&vtHeders) = SysAllocString(L"Referrer: http://microsoft.com\r\n");
HRESULT hr = m_spWebBrowser2->Navigate2(&vtUrl, &vtEmpty, &vtEmpty, &vtEmpty, &vtHeaders);

получаю E_FAIL в hr,
если же делать просто
HRESULT hr = m_spWebBrowser2->Navigate2(&vtUrl, &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);
то нормально иду по урлу.
пишу в VS 2008.
Записан
xitca
Гость
« Ответ #1 : 24-02-2009 14:36 » 

сорри за синтаксические ошибки, не спал сутки Улыбаюсь
Записан
zubr
Гость
« Ответ #2 : 24-02-2009 15:24 » 

Можешь воспользоваться моим кодом:
Код:
void CIEHelper::Navigate (LPCTSTR lpszURL, DWORD dwFlags,
      LPCTSTR lpszTargetFrameName,
      LPCTSTR lpszHeaders,
      LPVOID lpvPostData,
      DWORD dwPostDataLen)
{
     if (m_pWebBrowser == NULL)
return;

CString strURL (lpszURL);
     BSTR bstrURL = strURL.AllocSysString ();
     char *MBCS_buffer;
     COleSafeArray vPostData;

     if (lpvPostData != NULL)
     {
if (dwPostDataLen == 0)
dwPostDataLen = lstrlen ((LPCTSTR) lpvPostData) /** sizeof(TCHAR)*/;

  if (sizeof(TCHAR) == 2)
{
             MBCS_buffer = new char[dwPostDataLen + 1];
             ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)lpvPostData, dwPostDataLen, MBCS_buffer,
                        dwPostDataLen + 1, NULL, NULL);
             vPostData.CreateOneDim (VT_UI1, dwPostDataLen, MBCS_buffer);
             delete MBCS_buffer;
}
else
vPostData.CreateOneDim (VT_UI1, dwPostDataLen, lpvPostData);
     }

     m_pWebBrowser->Navigate (bstrURL, COleVariant ((long) dwFlags, VT_I4), COleVariant (lpszTargetFrameName, VT_BSTR),
vPostData, COleVariant (lpszHeaders, VT_BSTR));

     SysFreeString (bstrURL);

};
Записан
xitca
Гость
« Ответ #3 : 24-02-2009 18:23 » 

спасибо большое, но я не использую MFC, только АТЛ. И потом, мне бы разобраться в чем проблема интересно было Улыбаюсь почему же возвращается E_FAIL.
и еще если делаю тестовую страничку с урлом url1, на ней ссылка на другую страницу url2, и я ставлю брейкпоинт на переход на вот эту вторую страницу url2 при обработке BeforeNavigate2,
то когда исполнение программы останавливается, и я просматриваю значение переменных, то вижу в pDispParams->rgvarg[1] нет реферрера. но если продолжить выполнение, то я успешно перехожу на url2 и вижу, что реферрер передался все-таки.
вот так. ничего не пойму Жаль
Записан
zubr
Гость
« Ответ #4 : 25-02-2009 04:46 » 

xitca,  ты же вызываешь Navigate из события BeforeNagate, которое еще не завершилось. Попробуй, создай свою мессагу, в которой делай Navigate, а мессагу вызывай из BeforeNavigate через PostMessage.
Записан
xitca
Гость
« Ответ #5 : 25-02-2009 13:01 » 

все отлично! спасибо за объяснения, очень помогло!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines