Java Servlets - 如何检测用户是否来自移动设备?
我正在使用TinyMCE javascript编辑器,但它无法在iphone上运行。如何检测用户是否来自移动设备?
答案 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 {
}
}