Метод мобильной проверки не работает в некоторых браузерах - PullRequest
1 голос
/ 12 сентября 2011

Я использую метод ниже, чтобы проверить, есть ли мобильная версия, но она не всегда работает на всех настольных браузерах, и это не вопрос версий IE, потому что на некоторых машинах есть IE9, и он остался на моей версии для настольных компьютеров и некоторых других машинах. с IE9, перенаправленным на мобильную версию, когда я всегда должен возвращать false с ПК, и то же самое случилось с некоторыми пользователями 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;
        }

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Если мне не нужно использовать возможности устройства (обычно WURFL), тогда я использую этот код . Может быть, вы могли бы завершить свой код с этим регулярным выражением.

0 голосов
/ 12 сентября 2011

хорошо, я нашел работу вокруг я добавил еще чек

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