Over a million developers have joined DZone.

How to Get The Windows Phone User Agent String

· Mobile Zone

On a recent project I needed to extract the windows phone user-agent string for our usage analytics, and it had to be the same user-agent as the IE requests. While this didn’t end up being as straight forward and I had hoped, the code below involves a few simple steps. First we have to insert a collapsed browser onto the page, then we can navigate it to specifically crafted HTML/JavaScript, which will in-turn notify the WebBrowser control of it’s user-agent. All you need to do is store it somewhere; in my case, I put it into a custom ApplicationSettings class, but you can store it anywhere you want.


Since this code requires adding a WebBrowser control to a page, it’s probably easier to do in code-behind as opposed to a view model.

public partial class HomeView : PhoneApplicationPage
    public HomeView()
        Loaded += HomeView_Loaded;

    private void HomeView_Loaded(object sender, RoutedEventArgs e)
            userAgent =>
                    // TODO: Store this wherever you want
                    ApplicationSettings.Current.UserAgent = userAgent;

The Helper

public static class UserAgentHelper
    private const string Html =
        @"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">

        <script language=""javascript"" type=""text/javascript"">
            function notifyUA() {
        <body onload=""notifyUA();""></body>

    public static void GetUserAgent(Panel rootElement, Action<string> callback)
        var browser = new Microsoft.Phone.Controls.WebBrowser();
        browser.IsScriptEnabled = true;
        browser.Visibility = Visibility.Collapsed;
        browser.Loaded += (sender, args) => browser.NavigateToString(Html);
        browser.ScriptNotify += (sender, args) =>
                                        string userAgent = args.Value;

Published at DZone with permission of Matt Hidinger , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}