Сервлеты Java - Как я могу определить, является ли пользователь мобильным устройством? - PullRequest
10 голосов
/ 25 апреля 2010

Java Servlets - Как я могу определить, является ли пользователь мобильным устройством?

Я использую редактор JavaScript TinyMCE, и он не работает на iphone. Как я могу определить, идет ли пользователь с мобильного устройства?

Ответы [ 6 ]

24 голосов
/ 26 июля 2012

Я использовал класс UAgentInfo.java , который можно скачать здесь (http://code.google.com/p/mobileesp/source/browse/Java/UAgentInfo.java):

private boolean isRequestComingFromAMobileDevice(final HttpServletRequest request){

    // http://www.hand-interactive.com/m/resources/detect-mobile-java.htm
    final String userAgent = request.getHeader("User-Agent");
    final String httpAccept = request.getHeader("Accept");

    final UAgentInfo detector = new UAgentInfo(userAgent, httpAccept);

    return detector.detectMobileQuick();
}

Класс UAgentInfo имеет множество методов для обнаружения определенных устройств. Просто замените Detector.detectMobileQuick () , например, Detector.detectIphoneOrIpod () , Detector.detectKindle () и т. Д.

ОБНОВЛЕНИЕ: Если вы используете Spring, вы можете вместо этого использовать его нативную реализацию. Вот пример: http://spring.io/guides/gs/device-detection/

8 голосов
/ 25 апреля 2010

Использование request.getHeader("User-Agent"). Здесь - список мобильных браузеров и их соответствующих агентов пользователя.

4 голосов
/ 25 апреля 2010

Я использую редактор JavaScript TinyMCE

Поскольку вы хотите изменить поведение на стороне клиента в зависимости от клиента, лучше всего обрабатывать это на стороне клиента, а не на стороне сервера.

В мире CSS вы можете подключить тип носителя , чтобы применять стили в зависимости от используемого носителя. Наиболее используемые типы носителей: экран (обычно ПК), портативный (обычно мобильный) и печатный (для распечатанной страницы).

Вы можете использовать его для скрытия редактора, используя только следующее правило в вашем CSS:

@media handheld {
    #elementIdContainingEditor { display: none; }
}

Вы даже можете указать отдельные таблицы стилей в зависимости от используемого носителя.

<link rel="stylesheet" href="default.css" media="screen">
<link rel="stylesheet" href="mobile.css" media="handheld">

Если проблема на самом деле еще в том, что она не работает из-за того, что JavaScript отключен на конкретном клиенте, тогда вам лучше выполнить определенный CSS, когда JS отключен:

<noscript><style>#elementIdContainingEditor { display: none; }</style></noscript>

Или наоборот, сначала скрыть, а затем показать, когда JS включен:

<script>document.getElementById('elementIdContainingEditor').style.display = 'block';</script>

Это более надежно, чем анализировать агент на стороне сервера.

0 голосов
/ 21 октября 2016
public void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
  if(request.getHeader("User-Agent").indexOf("Mobi") != -1) {

  } else {

  }
}
0 голосов
/ 25 апреля 2010

Используйте User-Agent в заголовке HTTP-запроса.

request.getHeader("User-Agent")
0 голосов
/ 25 апреля 2010

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

Вы также можете добавить JavaScript для запуска чего-либо в браузере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...