Как определить мобильный браузер и направить в него соответствующий контент?

Я читал, что плохо (не рекомендуется) использовать User Agent Sniffing для отправки правильного контента для мобильного браузера, поэтому мне интересно, как лучше всего это сделать?

Я использую ASP.NET MVC, и я создал свой сайт, и он хорошо работает в настольных браузерах, поэтому я хочу начать создание мобильной версии. Когда мобильный браузер заходит на мой сайт, я хотел бы использовать другой набор представлений, который в идеале обладает следующими атрибутами:

  1. Ссылка на предварительно масштабированные изображения
  2. Используйте минимальный JavaScript
  3. Удалить все, кроме основного контента

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


person Nate    schedule 16.08.2010    source источник
comment
возможный дубликат обнаружения запросов от мобильных браузеров в ASP.NET   -  person John Farrell    schedule 17.08.2010
comment
@jfar, у MVC есть особые требования для этого. См. пост Гензельмана. AFAICS, ответ, на который вы ссылаетесь, не распространяется на это.   -  person Craig Stuntz    schedule 18.08.2010
comment
Здесь вы можете увидеть некоторые решения: stackoverflow.com/questions/6844020/   -  person    schedule 17.08.2011


Ответы (4)


Пользовательский агент — это все, что у вас есть в HTTP GET запросе, но вы должны позволить кому-то другому вести список. Мы используем файл Microsoft Mobile Device Browser с настраиваемым механизмом представления примерно так же, как эта запись Скотта Хансельмана.

person Craig Stuntz    schedule 16.08.2010
comment
Спасибо, это то, о чем я как бы подумал, наверное, я неправильно понял причину, по которой мне сказали не делать этого. Я полностью согласен с тем, что ведение списка совместимости — это PITA! - person Nate; 17.08.2010

Лучший способ обнаружить мобильный браузер — использовать этот замечательный проект codeplex:

http://mdbf.codeplex.com/

Подробнее о том, как создавать целевые представления, читайте здесь:

http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx

person Keith Adler    schedule 16.08.2010

Самым простым подходом может быть использование отдельного домена «m.yourdomain.com» или «yourdomain.mobi» (Источник), таким образом можно предположить, что пользователь находится на мобильном устройстве.

person ChrisF    schedule 16.08.2010
comment
В этом случае, буду ли я использовать агент браузера и файл cookie для перенаправления один раз, и если они вернутся, предположим, что я неправильно пометил их пользовательский агент и позволил им продолжить работу на полном сайте? - person Nate; 17.08.2010
comment
Такой подход может быть болезненным. Вы должны предположить, что любой, кто заходит на m.website.com, хочет мобильный сайт, но всегда дает им ссылку на полный сайт в нижнем колонтитуле. - person Keith Adler; 17.08.2010
comment
@Nissan - это хорошая идея, хотя чем больше я об этом думаю, тем больше убеждаюсь, что мой ответ не обязательно является хорошей идеей. - person ChrisF; 17.08.2010
comment
@Nate - вы могли бы сделать или просто иметь ссылку на мобильный сайт на основном сайте, хотя мой ответ меня больше не убеждает;) - person ChrisF; 17.08.2010
comment
Я имел в виду перенаправление на мой www. домен, один раз редирект на m. домен. Я согласен, иметь отдельные домены — довольно безопасный вариант. Я думаю, что буду использовать файл мобильного браузера, так как он кажется довольно полезным. - person Nate; 17.08.2010
comment
Однако никогда не перенаправляйте глубокую ссылку на домашнюю страницу для мобильных устройств. Это ломает внешние ссылки и раздражает мобильных пользователей. - person Craig Stuntz; 17.08.2010

Хотя я считаю, что анализировать возможности браузера для определения возможностей не рекомендуется, и вам следует использовать анализ возможностей, например JQuery. .поддержка. Когда дело доходит до представления существенно разных макетов, я думаю, вам нужно вынюхивать идентификатор браузера и действовать соответственно.

person Lazarus    schedule 16.08.2010
comment
Это работает после загрузки страницы. Однако при ответе на запрос GET на сервере это невозможно сделать. - person Craig Stuntz; 17.08.2010
comment
@Craig - Конечно, я думал со стороны клиента, но проблема заключается в обработке со стороны сервера, где у вас, очевидно, есть только идентификатор браузера, предоставленный во время GET. - person Lazarus; 17.08.2010