2011-09-12 14 views
1

私は以下の方法でモバイル版があるかどうかを確認していますが、すべてのデスクトップブラウザで動作するとは限りません。IE版ではありません。それは私のデスクトップのバージョンと他のいくつかのマシンに残っていた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

このようなチェックされていないユーザーエージェントのスニッフィングを使用すると、偽陽性と偽陰性がほとんど保証されます。 User-Agentの文字列は、インストールされているすべてのソフトウェアを介して拡張可能であり、チェックは広すぎます。たとえば、「Avant」はデスクトップブラウザのAvantBrowserに当てはまり、他の2文字のチェックのいくつかは、UA文字列の拡張トークンで確かに見つかる可能性があります。私たちはこれが野生で起こっているのを見ました。 – EricLaw

答えて

0

OK私は、私はこのcodeを使用して、デバイスの機能(normaly WURFL)を使用する必要があるドント場合より

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

どこに追加しましたか?それはPocketPCで偽陰性をもたらすことになります。 – EricLaw

1

をチェック追加 周りの仕事を見つけました。たぶんこの正規表現でコードを完成させることができます。