0

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

基于 CHtmlView 的浏览器。MFC。

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

我做了:

  1. User-Agent 值用作 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。

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

谢谢!

4

2 回答 2

1

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

于 2009-08-04T13:10:15.110 回答
0

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

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

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

一些参考资料: 更改 WebBrowser 控件的用户代理

于 2009-08-05T05:48:55.577 回答