【问题标题】:Java Servlets - How do I detect if a user is from a mobile device?Java Servlets - 如何检测用户是否来自移动设备?
【发布时间】:2011-02-12 00:53:35
【问题描述】:

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

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

【问题讨论】:

标签: java javascript servlets mobile


【解决方案1】:

我使用了 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/

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我正在使用 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>
      

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

      【讨论】:

        【解决方案4】:

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

        你也可以添加一些 javascript 在浏览器上运行一些东西?

        【讨论】:

          【解决方案5】:

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

          request.getHeader("User-Agent")
          

          【讨论】:

            【解决方案6】:
            public void doGet(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException, IOException {
              if(request.getHeader("User-Agent").indexOf("Mobi") != -1) {
            
              } else {
            
              }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-05-26
              • 1970-01-01
              • 1970-01-01
              • 2022-09-30
              • 1970-01-01
              • 2015-01-06
              相关资源
              最近更新 更多