0

Я пытаюсь создать адаптивный/отзывчивый сайт.Ширина экрана на стороне сервера .NET 51Degrees и т. Д.

Мое намерение состоит в том, что на всех устройствах с шириной экрана> = 1024px я покажу свою версию рабочего стола и использую отзывчивый CSS для масштабирования элементов. Все элементы будут отображаться в этом представлении.

Для экранов с разрешением 1024 пикселя дисплей будет отличаться, отображая различную серию отображаемых элементов и другой набор настраиваемых правил CSS.

Итак, мне нужно определить ширину экрана, на стороне сервера.

Я знаю, что могу сделать это с помощью Javascript-файла cookie и AJAX, но я не хочу идти таким путем, поэтому пытался найти какой-либо плагин ASP.NET, поэтому наткнулся на 51Degrees, но я не с большим успехом ...

Используя мобильный эмулятор Google Chrome, я всегда получаю неправильные результаты ширины, в основном, только в Playbook от Blackberry! iPhones возвращают ширину 640 пикселей, и многие устройства удваивают их ширину, что я полагаю из-за Device Pixel Ratio

Кроме того, коды устарели, т.е. игнорируют iPhone6 ​​и т. д., я предполагаю, что это означает, что мне нужно использовать версию оплаты, чтобы она автоматически загружала и обновляла свои файлы ссылок?

код просто:

Dim ScreenWidth as Integer = Request.Browser.ScreenPixelsWidth 

Но, основываясь на мой комментарий выше, это по большому счету бессмысленно для моих целей, так же, он также чувствует, как массовое убийство, чтобы это довольно сложный Отнесение 51Degrees, когда все Мне нужен такой маленький объем данных.

Раньше я использовал запрос Regex инспектирующую агента пользователя, который выглядел так:

Public Shared Function isMobile(Optional IncludeIPad As Boolean = False) As Boolean 

    ' NOTE THIS FUNCTION DOES NOT CONSIDER IPADS AS MOBILE. TO INCLUDE THIS, ADD |ad TO THE b REGEX STRING AFTER ip(hone|od 
    Dim u As String = HttpContext.Current.Request.ServerVariables("HTTP_USER_AGENT") 

    Dim AgentString As String = "android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino" 

    If IncludeIPad Then _ 
     AgentString = AgentString.Replace("ip(hone|od)", "ip(hone|od|ad)") 

    Dim b As New Regex(AgentString, RegexOptions.IgnoreCase) 
    Dim v As New Regex("1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase) 

    If b.IsMatch(u) Or v.IsMatch(Left(u, 4)) Or HttpContext.Current.Request.QueryString("mobile") = "yes" Then 
     isMobile = True 
    Else 
     isMobile = False 
    End If 

End Function 

Это прекрасно работает, но слишком широк, и возвращается, например, любое Android устройство, как Mobile, даже если это Galaxy Tab с разрешением экрана 1024, который я не хочу рассматривать как мобильный. Вы можете видеть, что я адаптировал код, чтобы не рассматривать iPad как мобильный, но не удалось сделать то же самое с Tab.

Наконец-то к моему фактическому вопросу: есть ли у кого-нибудь какие-либо реалистичные советы для достижения этого или знать регулярно обновляемый API, который я мог бы назвать, чтобы захватить эти данные от User Agent или что-то еще ...?

ответ

0

Версия 51Degrees Lite поддерживает 30 000 наиболее популярных комбинаций устройств/браузеров. Это означает, что список не будет завершен.

Сложность в ширине экрана заключается в том, что у сервера нет реалистичного способа узнать, какой размер экрана. 51Degrees хорош для обнаружения размеров экранов мобильных устройств, но настольные устройства - совершенно другая область, а размеры экрана обычно не записываются для настольных/переносных устройств. Вы считали, что вместо этого используете свойство IsMobile? Он эффективно отделяет мобильные и настольные устройства, поэтому нет необходимости проверять размер экрана. Или, возможно, добавление свойства IsMobile в логику веб-сайта, чтобы не мобильные устройства не проверялись на размер экрана.

Еще одна вещь, которую следует учитывать, - использовать ли вы последний файл данных. Файлы данных Lite обновляются чаще, но это происходит каждые несколько недель. Последний всегда можно найти на github.

Кроме того, если вы чувствуете, что пользовательский агент не идентифицирован должным образом, вы всегда можете позвонить в let us know, и мы будем исследовать, есть ли проблема.

+0

Привет, Майк, спасибо. После дальнейших исследований я думаю, что по какой-то причине моя установка файла 51Degress .dll не сработала. Я удалил его и просто использовал во встроенной функции .NET is is mobile и обнаружил, что получаю те же ответы. На данный момент я сам это модифицировал и с некоторыми тестированиями через консоль Chrome и данными из максимально возможного числа пользователей с помощью мобильных устройств, есть что-то, что работает достаточно хорошо. Моя главная цель состояла в том, чтобы разделить устройства на два, Mobile, определяемые как все с шириной экрана <1024, что я * думаю * я получил более или менее. –