我有一个网络应用程序,手机用户可以看到移动优化网站。新的三星Galaxy SIII用户代理无法提供请求来自手机的线索。检测手机有哪些最佳实践?
我知道javascript特征检测(即现代化),但我希望能有更好的东西。以下是三星Galaxy SIII用户代理:
Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 534.24(KHTML,与Gecko一样)Chrome / 11.0.696.34 Safari / 534.24
编辑:SIII有两个可能的用户代理。以上是“桌面”版本。好玩的东西。请参阅以下链接了解详情。
答案 0 :(得分:3)
看看那个用户代理,我不得不说,与非手持设备区别开来是非常困难的。
浏览器检测的问题在于,调整用户代理字符串显然很容易,因此您从未真正知道服务器告诉您的内容是否诚实。
在这种情况下,您有两种选择:
您可以查看手机发送的每一个标头,也许可以查看是否有一个可以使其唯一的标头
或者通过测试页面加载时间等来找到某种类型的解决方法...,作为一个异想天开的例子,手持设备上的浏览器通常会使页面比桌面版本的浏览器慢一些,所以在测试了每个可能的移动设备之后设备something like:
-
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
// some code..
}
您可以查看除了简单脚本之外没有其他内容的页面是否未加载到理想时间内。
你明白了。
此外,请尝试访问此处,看看它是否可以检测到您:http://detectmobilebrowsers.com/
答案 1 :(得分:2)
“桌面模式”用户代理的设计使得当用户故意选择使用桌面模式时,Web服务器无法提供移动/平板电脑界面 - 这是一种可用性反模式,可以从用户。
如果您绝对 *必须*覆盖用户的选择,那么在JavaScript当前(2013)如果满足以下所有条件,则很可能是Android设备:
'ontouchstart' in document.documentElement
navigator.vendor === 'Google Inc.'
/^Linux armv/.test(navigator.platform)
然而,上面的一些不太常见的浏览器设置会给出误报和否定,例如基于ARM的ChromeBook,带触摸功能,例如也许Chromium在Linux上使用ARM处理器运行(尽管可能是Linux / ARM),例如:也许其他浏览器Firefox / Opera等不像电视那样基于触摸的Android设备,例如Chrome可以在带有ARM处理器的Windows RT上运行吗?例如在英特尔上运行的Android。
答案 2 :(得分:0)
我必须检测"桌面视图"毕竟,与robocat的回答类似,这就是我用来检测桌面视图的原因。它并不完美,但它似乎提供了避免误报的正确平衡:
if (userAgent.indexOf('X11; Linux x86_64') !== -1
&& 'ontouchstart' in document.documentElement
&& /^Linux armv/.test(navigator.platform)
&& _constructor.isChrome) {
if ((window.outerWidth < 500 && window.outerHeight < 800) || (window.outerWidth < 800 && window.outerHeight < 500)) {
// do stuff.
}
}
&#13;
帮助我决定宽度/高度过滤器应该是什么
http://mydevice.io/devices/ http://viewportsizes.com/?filter=