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

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

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

Ответ 1

Я использую редактор 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>

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

Ответ 2

Я использовал класс 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 есть множество методов для обнаружения определенных устройств. Просто замените detect.detectMobileQuick(), например, на детектор .detectIphoneOrIpod(), detector.detectKindle() и т.д.

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

request.getHeader("User-Agent")

Ответ 6

public void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
  if(request.getHeader("User-Agent").indexOf("Mobi") != -1) {

  } else {

  }
}