IE6 +,如何更改User-Agent的Ajax请求呢?

时间:2009-08-04 12:48:42

标签: ajax internet-explorer user-agent

我想用自己的User-Agent值创建自己的浏览器应用程序。

基于CHtmlView的浏览器。 MFC。

但Ajax请求中存在来自User-Agent的奇怪问题......

我做了:

  1. User-Agent值用作Navigate()的参数。 Navigate()请求使用正确的User-Agent。

  2. 重载CHtmlView类的OnAmbientProperty()方法。

  3.     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值。

    我的电脑是基于IE7的WinXP。

    知道如何解决这个问题吗? 如何从我的浏览器更改任何请求的User-Agent?

    谢谢!

2 个答案:

答案 0 :(得分:1)

在ajax请求中,您可以设置HTTP标头“User-Agent”:http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070618/#dfn-setrequestheader

答案 1 :(得分:0)

我解决了UrlMkSetSessionOption()的问题,它只更改了当前会话的IE设置:

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

只有一个但是,它会改变设置一次。另一个调用返回没有错误,也没有更改。

一些参考文献: Changing the user agent of the WebBrowser control