IE6 +, как изменить User-Agent для запросов Ajax тоже? - PullRequest
0 голосов
/ 04 августа 2009

Я хочу создать собственное браузерное приложение с собственным значением User-Agent.

Браузер на основе CHtmlView. MFC.

Но существует странная проблема с User-Agent из Ajax-запросов ...

Я сделал:

  1. Значение User-Agent используется в качестве аргумента для Navigate (). А Navigate () запрашивает право использования User-Agent.

  2. Перегрузка метода OnAmbientProperty () класса CHtmlView.

    BOOL MyHtmlView::OnAmbientProperty(COleControlSite *pSite, 
DISPID dispid, VARIANT *pvar) 
    {
      USES_CONVERSION;
      // Change user agent for this web browser host during hyperlinks
      if (dispid == DISPID_AMBIENT_USERAGENT)
      {
        pvar->vt = VT_BSTR;
        pvar->bstrVal = ::SysAllocString(m_userAgent);
        return TRUE;
      }
      return CHtmlView::OnAmbientProperty(pSite, dispid, pvar);
    }

Это решит проблему с гиперссылкой.

Но я должен использовать этот браузер для некоторых приложений Ajax. И вот проблема. Для запросов Ajax используется оригинальное значение IE User-Agent.

Мой ПК на базе WinXP с IE7.

Есть идеи, как это решить? Как изменить User-Agent для любого запроса из моего браузера?

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 августа 2009

По запросу ajax вы можете установить HTTP-заголовок «User-Agent»: http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070618/#dfn-setrequestheader

0 голосов
/ 05 августа 2009

Я решил проблему с UrlMkSetSessionOption (), он изменил настройки IE только для текущей сессии:

    const char ua[] = "My user agent string";
    HRESULT rez = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, (LPVOID)ua, sizeof(ua), 0);

Только один, но он меняет настройки за один раз. Другие вызовы не возвращаются без ошибок и без изменений.

Некоторые ссылки: Изменение пользовательского агента элемента управления WebBrowser

...