2010-04-25 55 views
10

Servlets de Java: ¿cómo puedo detectar si un usuario es de un dispositivo móvil?Servlets de Java: ¿cómo puedo detectar si un usuario es de un dispositivo móvil?

Estoy usando el editor de TinyMCE javascript, y no funciona en el iphone. ¿Cómo puedo detectar si el usuario proviene de un dispositivo móvil?

+2

Aparte - ver esta definición divertida de un dispositivo móvil: http://www.zytrax.com/tech/web/mobile_ids.html#mobile –

Respuesta

4

estoy usando el editor TinyMCE Javascript

Desde desea cambiar el comportamiento del cliente en función del cliente, es mejor para manejar esta en el lado del cliente en lugar de el lado del servidor.

En CSS world, puede enganchar en media type para aplicar estilos dependiendo del medio utilizado. La mayoría de los tipos de medios utilizados son pantalla (generalmente PC), computadora de mano (generalmente móviles) e impresión (para la página impresa).

Se puede hacer uso de ella para ocultar el editor sólo por la siguiente regla en su CSS:

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

Incluso puede especificar hojas de estilo separadas en función de los medios utilizados.

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

Si el problema es en realidad más que no funciona porque JavaScript está deshabilitado en el cliente en particular, entonces es mejor que tiene que ejecutar la CSS en particular cuando está desactivado JS:

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

O a la inversa, en un principio ocultarlo y luego mostrarla cuando se habilita JS:

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

Esto es más fiable que la inhalación del agente en el lado del servidor.

0

Lo único diferente es el User-Agent. Busque los agentes de usuario para los navegadores que desea detectar. (No estoy seguro de por qué le interesaría)

¿También podría agregar algo de javascript para ejecutar algo en el navegador?

8

Usando request.getHeader("User-Agent"). Here es una lista de navegadores móviles y sus respectivos Agentes de usuario.

0

Utilice el User-Agent en el encabezado de solicitud HTTP.

request.getHeader("User-Agent") 
23

He utilizado la clase UAgentInfo.java se puede descargar aquí (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(); 
} 

El clase UAgentInfo tiene un montón de métodos para detectar dispositivos particulares también. Simplemente reemplace detector.detectMobileQuick() por, por ejemplo, detector.detectIphoneOrIpod(), detector.detectKindle(), etc.

ACTUALIZACIÓN: Si utiliza Spring, es posible que desee utilizar su implementación nativa en su lugar. Aquí está un ejemplo: http://spring.io/guides/gs/device-detection/

+0

aquí es: http://search.maven.org/#search|ga|1|com.github.autograder – PaulG

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

    } else { 

    } 
} 
Cuestiones relacionadas