2011-09-12 74 views
1

我正在使用下面的方法來檢查移動版本,但它並不總是適用於所有桌面瀏覽器,並且它不是IE版本的問題,因爲有些機器具有IE9和它留在我的桌面版本和一些其他機器與IE9重定向到移動版本,當我應該總是從PC返回假和一些IE8用戶發生相同移動檢查方法在某些瀏覽器上不起作用

這種方法是否有任何例外?

 public static bool IsMobile() 
     { 
      //GETS THE CURRENT USER CONTEXT 
      HttpContext context = HttpContext.Current; 

      //FIRST TRY BUILT IN ASP.NT CHECK 
      if (context.Request.Browser.IsMobileDevice) 
      { 
       return true; 
      } 
      //THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER 
      if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null) 
      { 
       return true; 
      } 
      //THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP 
      if (context.Request.ServerVariables["HTTP_ACCEPT"] != null && 
      context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap")) 
      { 
       return true; 
      } 
      //AND FINALLY CHECK THE HTTP_USER_AGENT 
      //HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING 
      if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null) 
      { 
       //Create a list of all mobile types 
       string[] mobiles = { 
"midp", "j2me", "avant", "docomo", 
"novarra", "palmos", "palmsource", 
"240x320", "opwv", "chtml", 
"pda", "windows ce", "mmp/", 
"blackberry", "mib/", "symbian", 
"wireless", "nokia", "hand", "mobi", 
"phone", "cdm", "up.b", "audio", 
"SIE-", "SEC-", "samsung", "HTC", 
"mot-", "mitsu", "sagem", "sony" 
, "alcatel", "lg", "eric", "vx", 
"NEC", "philips", "mmm", "xx", 
"panasonic", "sharp", "wap", "sch", 
"rover", "pocket", "benq", "java", 
"pt", "pg", "vox", "amoi", 
"bird", "compal", "kg", "voda", 
"sany", "kdd", "dbt", "sendo", 
"sgh", "gradi", "jb", "dddi", 
"moto", "iphone" 
}; 

       //Loop through each item in the list created above 
       //and check if the header contains that text 
       foreach (string s in mobiles) 
       { 
        if (context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower())) 
        { 
         return true; 
        } 
       } 
      } 

      return false; 
     } 
+0

使用未經檢查的用戶代理嗅探,這樣幾乎可以保證給您帶來誤報和誤報。用戶代理字符串可以通過各種安裝的軟件進行擴展,並且您的支票過於寬泛。例如,「Avant」可能會觸及桌面瀏覽器AvantBrowser,並且可以在UA字符串的擴展標記中找到幾個其他雙字符檢查。我們已經看到這發生在野外。 – EricLaw

回答

0

好,我發現周圍的工作 我增加了更多的檢查

if (context.Request.UserAgent.ToLower().Contains("pc")) 
      { 
       return false; 
      } 
+0

你在哪裏添加的?這將導致PocketPC的假陰性。 – EricLaw

1

如果我不需要使用的設備功能(normaly WURFL),然後我用這個code。也許你可以用這個正則表達式來完成你的代碼。

相關問題