【问题标题】:IE6+, how to change User-Agent for Ajax requests too?IE6+,如何更改 Ajax 请求的用户代理?
【发布时间】:2010-11-16 16:09:36
【问题描述】:

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

基于 CHtmlView 的浏览器。 MFC。

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

我做到了:

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

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

BOOL MyHtmlView::OnAmbientProperty(COleControlSite *pSite, DISPID dispid, VARIANT *pvar) { 使用转换; // 在超链接期间更改此 Web 浏览器主机的用户代理 如果(dispid == DISPID_AMBIENT_USERAGENT) { pvar->vt = VT_BSTR; pvar->bstrVal = ::SysAllocString(m_userAgent); 返回真; } 返回 CHtmlView::OnAmbientProperty(pSite, dispid, pvar); }

这解决了超链接的问题。

但我必须将这个浏览器用于一些 Ajax 应用程序。 这是问题所在。对于 Ajax 请求,它使用原始 IE User-Agent 值。

我的电脑是基于 IE7 的 WinXP。

知道如何解决这个问题吗? 如何为来自我的浏览器的任何请求更改用户代理?

谢谢!

【问题讨论】:

    标签: ajax internet-explorer user-agent


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      const char ua[] = "我的用户代理字符串"; HRESULT rez = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, (LPVOID)ua, sizeof(ua), 0);

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

      一些参考资料: Changing the user agent of the WebBrowser control

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        • 2019-08-10
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多