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

时间:2010-04-25 06:24:22

标签: java javascript servlets mobile

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

我正在使用TinyMCE javascript编辑器,但它无法在iphone上运行。如何检测用户是否来自移动设备?

6 个答案:

答案 0 :(得分: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();
}

UAgentInfo 类还有许多方法可以检测特定设备。只需替换 detector.detectMobileQuick(),例如 detector.detectIphoneOrIpod() detector.detectKindle()

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

答案 1 :(得分:8)

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

答案 2 :(得分:4)

  

我正在使用TinyMCE javascript编辑器

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

在CSS世界中,您可以依赖于media type来应用样式,具体取决于所使用的媒体。最常用的媒体类型是屏幕(通常是PC),手持(通常是手机)和打印(打印页面)。

您可以通过CSS中的以下规则将其用于隐藏编辑器:

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

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

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

如果问题实际上更多,因为它在特定客户端上禁用了JavaScript,那么你最好在禁用JS时执行特定的CSS:

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

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

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

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

答案 3 :(得分:0)

唯一不同的是用户代理。查找要检测的浏览器的用户代理。 (不知道你为什么要关心)

您还可以添加一些javascript来在浏览器上运行某些内容吗?

答案 4 :(得分:0)

在HTTP请求标头中使用User-Agent。

request.getHeader("User-Agent")

答案 5 :(得分:0)

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

  } else {

  }
}