安卓手机浏览器检测

Android Phone Browser Detection

本文关键字:检测 浏览器 手机      更新时间:2023-12-19

我有一个web应用程序,手机用户可以在其中看到移动优化的网站。新的三星Galaxy SIII用户代理没有提供任何来自手机的请求的线索。检测手机的最佳方法是什么?

我知道javascript特性检测(即modernizer),但我希望有更好的功能。以下是三星Galaxy SIII用户代理:

Mozilla/5.0(X11;Linux x86_64)AppleWebKit/534.24(KHTML,类似Gecko)Chrome/11.0696.34 Safari/534.24

编辑:SIII有两个可能的用户代理。以上是"桌面"版本。有趣的东西。有关详细信息,请参阅下面的链接。

http://www.anandtech.com/Show/Index/5310?cPage=19&all=False&sort=0&page=5&slug=samsung galaxy nexus冰淇淋三明治评论

看看这个用户代理,我不得不说,它很难与非手持设备区分开来。

浏览器检测的问题是,很容易调整用户代理字符串,因此你永远不知道服务器告诉你的是诚实的还是不诚实的。

在这种情况下,您有两种选择:

  • 你可以检查手机发送的每一个标题,也许可以看看是否有一个可以使其成为唯一的

  • 或者通过测试页面加载时间等来找到一些解决方法。。。。,举个异想天开的例子,手持设备上的浏览器通常会比台式机上的浏览器渲染页面慢一点,所以在用之类的东西测试了所有可能的移动设备后

-

if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
 // some code..
}

您可以看到一个只有一个简单脚本的页面是否没有在理想的时间加载。

你明白了。

此外,试着去这里看看它是否能检测到你:http://detectmobilebrowsers.com/

"桌面模式"用户代理的设计目的是,当用户故意选择桌面模式时,web服务器不会提供移动/平板电脑界面-从用户中删除该选择是一种可用性反模式。

如果你绝对*必须*覆盖用户的选择,那么在JavaScript当前(2013)中,如果以下所有内容都是真的,那么它很可能是Android设备:

  1. 'ontouchstart' in document.documentElement
  2. navigator.vendor === 'Google Inc.'
  3. /^Linux armv/.test(navigator.platform)

然而,对于一些不太常见的浏览器设置,例如基于ARM的带触摸的ChromeBook,例如可能在带有ARM处理器的Linux上运行的Chromium(尽管可能是Linux/ARM),例如可能是其他浏览器Firefox/Opera等,例如像电视一样不基于触摸的安卓设备,例如Chrome是否可以在带ARM处理器的Windows RT上运行?例如在英特尔上运行的安卓系统。

毕竟我必须检测"桌面视图",所以与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.
            }
  }

帮助我决定宽度/高度过滤器应该是什么

http://mydevice.io/devices/http://viewportsizes.com/?filter=