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