Java Servlets - 如何检测用户是否来自移动设备?

Kyl*_*yle 10 javascript java mobile servlets

Java Servlets - 如何检测用户是否来自移动设备?

我正在使用TinyMCE javascript编辑器,它在iphone上不起作用.如何检测用户是否来自移动设备?

Tia*_*ago 24

我已经使用了你可以在这里下载的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();
}
Run Code Online (Sandbox Code Playgroud)

UAgentInfo类有一堆方法来检测特定器件.只需将detector.detectMobileQuick()替换为detector.detectIphoneOrIpod(),detector.detectKindle()等.

更新:如果您使用Spring,您可能希望使用其本机实现.这是一个例子:http://spring.io/guides/gs/device-detection/


Boz*_*zho 8

request.getHeader("User-Agent").以下是移动浏览器及其各自用户代理的列表.


Bal*_*usC 4

我正在使用 TinyMCE javascript 编辑器

由于您希望根据客户端更改客户端行为,因此最好是在客户端而不是服务器端处理此问题。

在 CSS 世界中,您可以挂钩媒体类型以根据所使用的媒体应用样式。最常用的媒体类型是屏幕(通常是 PC)、手持设备(通常是移动设备)和打印(用于打印页面)。

您可以使用它来隐藏编辑器,只需在 CSS 中执行以下规则即可:

@media handheld {
    #elementIdContainingEditor { display: none; }
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以根据所使用的媒体指定单独的样式表。

<link rel="stylesheet" href="default.css" media="screen">
<link rel="stylesheet" href="mobile.css" media="handheld">
Run Code Online (Sandbox Code Playgroud)

如果问题实际上更多的是因为 JavaScript 在特定客户端上被禁用而无法工作,那么您最好在禁用 JS 时执行特定的 CSS:

<noscript><style>#elementIdContainingEditor { display: none; }</style></noscript>
Run Code Online (Sandbox Code Playgroud)

或者反过来,最初隐藏它,然后在启用 JS 时显示它:

<script>document.getElementById('elementIdContainingEditor').style.display = 'block';</script>
Run Code Online (Sandbox Code Playgroud)

这比在服务器端嗅探代理更可靠。