2010-04-25 5 views
10

Java-Servlets - Wie erkenne ich, ob ein Benutzer von einem mobilen Gerät stammt?Java-Servlets - Wie erkenne ich, ob ein Benutzer von einem mobilen Gerät stammt?

Ich benutze den TinyMCE Javascript Editor, und es funktioniert nicht auf dem iPhone. Wie kann ich feststellen, ob der Benutzer von einem mobilen Gerät kommt?

+2

Abgesehen - sehen Sie dieses amüsante Definition eines mobilen Geräts: http://www.zytrax.com/tech/web/mobile_ids.html#mobile –

Antwort

4

Ich bin mit dem TinyMCE JavaScript-Editor

Da Sie mögen, dass das Client-Seite Verhalten auf dem Client abhängig ändern, ist dies am besten eher auf der Clientseite zu handhaben als die Serverseite.

In der CSS-Welt können Sie die media type anhängen, um Stile abhängig vom verwendeten Medium anzuwenden. Die am häufigsten verwendeten Medientypen sind Bildschirm (in der Regel PCs), Handheld (in der Regel Handys) und Drucken (für die gedruckte Seite).

Sie können davon Gebrauch zu verstecken der Editor nur um die folgende Regel in Ihrem CSS machen:

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

Sie sogar separate Stylesheets abhängig von den verwendeten Medien angeben.

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

Wenn das Problem ist eigentlich mehr, dass es nicht funktioniert, weil JavaScript auf dem bestimmten Client deaktiviert ist, dann besser die besondere CSS ausführen müssen, wenn JS deaktiviert ist:

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

Or umgekehrt, es zunächst verstecken und dann zeigen, wenn JS aktiviert ist:

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

Dies ist zuverlässiger als der Agent in der Server-Seite Sniffing.

0

Das einzige, was anders ist, wird der User-Agent sein. Suchen Sie die Benutzeragenten für die Browser, die Sie erkennen möchten. (Nicht sicher, warum Sie das interessieren würden)

Sie könnten auch etwas Javascript hinzufügen, um etwas im Browser auszuführen?

8

Mit request.getHeader("User-Agent"). Here ist eine Liste von mobilen Browsern und ihren jeweiligen Benutzeragenten.

0

Verwenden Sie den Benutzeragenten im HTTP-Anforderungsheader.

request.getHeader("User-Agent") 
23

Ich habe die UAgentInfo.java Klasse verwendet werden, können Sie sich hier herunterladen (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(); 
} 

Die UAgentInfo Klasse hat eine Reihe von Methoden bestimmte Geräte als auch zu erkennen. Ersetzen Sie einfach detector.detectMobileQuick() für zum Beispiel detector.detectIphoneOrIpod(), detector.detectKindle() usw.

UPDATE: Wenn Sie Spring verwenden, möchten Sie möglicherweise stattdessen die native Implementierung verwenden. Hier ein Beispiel: http://spring.io/guides/gs/device-detection/

+0

Hier ist sie: 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 { 

    } 
} 
Verwandte Themen