6

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

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

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24

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

http://www.anandtech.com/Show/Index/5310?cPage=19&all=False&sort=0&page=5&slug=samsung-galaxy-nexus-ice-cream-sandwich-review

4

3 回答 3

3

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

浏览器检测的问题在于很容易调整用户代理字符串,因此您永远无法真正知道服务器告诉您的内容是否真实。

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

  • 您可以检查手机发送的每一个标头,也许看看是否有一个可以使其独一无二

  • 或者通过测试页面加载时间等来找到某种类型的解决方法......作为一个异想天开的例子,手持设备上的浏览器通常会比桌面浏览器渲染页面慢一些,所以在测试每个可能的移动设备后,使用类似的东西

-

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

您可以查看除了简单脚本之外没有其他内容的页面是否没有在理想时间加载。

你明白了。

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

于 2012-07-22T05:50:02.203 回答
2

“桌面模式”用户代理的设计目的是,当用户故意选择桌面模式时,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等等,例如像电视一样不基于触摸的Android 设备,例如Chrome 可以在带有ARM 处理器的Windows RT 上运行吗?例如,在 Intel 上运行的 Android。

于 2013-07-31T04:05:32.623 回答
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.
            }
  }

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

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

于 2015-04-16T20:22:12.993 回答