【问题标题】:WP7 Forming UserAgent programmaticallyWP7 以编程方式形成 UserAgent
【发布时间】:2011-07-28 13:09:47
【问题描述】:

我必须从我的应用程序将用户代理发送到服务器。

“Mozilla/4.0(兼容;MSIE 7.0;Windows Phone OS 7.0;Trident/3.1;IEMobile/7.0;HTC;HD7 T9292)” 以上是一个示例用户代理。我不知道。为了形成用户代理,我们可以通过编程获得哪些值。

【问题讨论】:

    标签: windows-phone-7 httpwebrequest user-agent


    【解决方案1】:

    为了记录,设备名称不是用户代理的必要部分。

    Mango 的全局 User-Agent 字符串如下所示:

    Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)
    

    【讨论】:

      【解决方案2】:

      这看起来像是在 HD7 上的 IE7 mobile 的用户代理。我假设您没有编写 IEMobile,因此您的应用程序将具有不同的用户代理名称/标识符。如果您从您的应用发出网络请求,那么您的应用与内置浏览器是不同的用户代理。

      SDK 没有公开获取构成示例中用户代理的所有单个元素的方法。

      如果您真的想从您的应用程序中获取浏览器的用户代理,您可能会做的最好的事情是包含一个 WebBrowser 控件,然后通过 Javascript 使用 navigator.userAgent 提取它,但我不知道如果支持。如果支持,您可以使用 windows.external.notify 将其传递回您的代码。

      【讨论】:

      • 如果我需要通过 Web 浏览器获取用户代理,那么我需要将 WebBrowser 添加到可视化树中。然后只有我可以得到用户代理。因此,在主页本身中,当我删除它时,网络浏览器将变得可见并关闭。有没有其他解决方法?
      • @saikamesh 我不是你想要的,但你可以使控件非常小或超出可见区域,或者在它前面添加另一个控件,使其不可见。如果您将控件的不透明度设置为 0,它甚至可能仍然有效。
      【解决方案3】:

      我创建了这个帮助程序,它将创建一个临时 WebBrowser、加载一个脚本并返回一个等待的 userAgent:

      internal static class UserAgentHelper
      {
          private const string Html = @"<!DOCTYPE html><html><body onload=""window.external.notify(navigator.userAgent);""></body></html>";
          public static Task<string> GetUserAgent()
          {
              var tcs = new TaskCompletionSource<string>();
              var browser = new WebBrowser { IsScriptEnabled = true };
              browser.ScriptNotify += (sender, args) => tcs.SetResult(args.Value);
              browser.NavigateToString(Html);
              return tcs.Task;
          }
      }
      

      用法:

      var userAgent = await UserAgentHelper.GetUserAgent();
      

      它至少适用于 WP7.1 和 WP8.0:

      WP7: "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator)";
      WP8: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; Microsoft; Virtual)";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        相关资源
        最近更新 更多