2015-07-11 70 views
0

有沒有辦法提取WebView控件使用的用戶代理字符串?如果是這樣,如果有人能給我一種方法,我將不勝感激。使用以下似乎不工作:C#Windows應用商店WebView獲取用戶代理

 var userAgent = new StringBuilder(256); 
     int length = 0; 
     UrlMkGetSessionOption(UrlMonOptionUserAgent, userAgent, userAgent.Capacity - 1, ref length, 0); 

回答

1

我收回那句話,用UrlMkGetSessionOption在代碼中提到的上述不工作。

+0

我的評論變得太大了,所以增加了一個可以擴展你的答案。有一個upvote。 – Stajs

1

我目前使用這種方法,改編自最初爲windows phone提供的方法。它給出了正確的結果,並從WebView對象的實例中直接得到它,因此讓我更有信心具有正確的價值。

private static string s_userAgent = null; 

    // Get the default UserAgent which webviews use on this platform. 
    public async Task<string> GetUserAgent() 
    { 
     if (s_userAgent == null) 
     { 
      const string Html = @"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN""> 
           <html> 
           <head> 
            <script language=""javascript"" type=""text/javascript""> 
             function notifyUA() { window.external.notify(navigator.userAgent); } 
            </script> 
           </head> 
           <body onload=""notifyUA();""></body> 
           </html>"; 

      SemaphoreSlim signal_done = new SemaphoreSlim(0, 1); 

      var wv = new WebView(); 
      wv.ScriptNotify += (sender, args) => 
      { 
       s_userAgent = args.Value; 
       // set signal, to show we've done 
       signal_done.Release(); 
      }; 
      wv.NavigateToString(Html); 

      // wait for signal 
      await signal_done.WaitAsync(); 

      Debug.WriteLine("GetUserAgent() called. User agent from WebView: \n{0}", s_userAgent); 
     } 

     return s_userAgent; 
    } 
0

這開始作爲評論,但變得太長了。爲了擴大他(@Rexfelis)自己的答案:

我發現可以有什麼取決於你在應用程序生命週期,其中UrlMkGetSessionOption回報差異,如果WebView已經在XAML視圖尚未初始化。

如果在組件初始化之前調用它,它將會丟失WebView/3.0(至少在Windows 10中);初始化之後,它將具有與@SimonTillson的答案相同的文本和結果。

如果您需要在組件初始化之前瞭解正確的用戶代理,則必須新建WebView並在查詢UrlMkGetSessionOption之前導航;例如var wv = new WebView(); wv.NavigateToString(...);。看起來用戶代理在第一次導航時被修改以包括WebView/3.0