2011-07-28 35 views
1

我必須從我的應用程序發送用戶代理到服務器。 「Mozilla/4.0(兼容; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; HTC; HD7 T9292)」 以上是一個示例用戶代理。我不知道。爲了形成用戶代理,我們可以通過編程獲得所有的值。任何人都可以請幫忙。WP7以編程方式形成UserAgent

回答

0

這看起來像在HD7上的IE7移動用戶代理。我假設你沒有寫IEMobile,所以你的應用會有不同的用戶代理名稱/標識符。如果您從您的應用發出網絡請求,那麼您的應用是與內置瀏覽器不同的用戶代理。

SDK沒有公開獲取組成示例中用戶代理的所有單個元素的方式。

如果你真的想要從你的應用程序中獲得瀏覽器的用戶代理,那麼最好的辦法可能是包括一個WebBrowser控件,然後通過Javascript解壓縮navigator.userAgent,但我不知道是否它的支持。如果支持,您可以使用windows.external.notify將它傳回給您的代碼。

+0

如果我需要通過Web瀏覽器獲取用戶代理,那麼我需要將WebBrowser添加到可視化樹中。然後只有我可以得到用戶代理。因此,在主頁本身,瀏覽器將變爲可見並在我刪除它時熄滅。有沒有其他解決方法? – saikamesh

+0

@saikamesh我不是你想要的東西,但是你可以使控件非常小或者在可見區域之外,或者在它前面添加另一個控件,使其不可見。如果將控件的不透明度設置爲0,它甚至可能仍然有效。 –

2

爲了記錄,設備名稱不是用戶代理的必要部分。

全球用戶代理字符串爲Mango看起來是這樣的:

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

我做了這個幫手,這將創建一個臨時的web瀏覽器,加載腳本,並返回一個awaitable的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)";