【问题标题】:Android Phone Browser Detection安卓手机浏览器检测
【发布时间】:2012-07-20 19:51:42
【问题描述】:

我有一个网络应用程序,手机用户可以在其中看到经过移动优化的网站。新的三星 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

【问题讨论】:

    标签: c# javascript android .net samsung-mobile


    【解决方案1】:

    毕竟我必须检测“桌面视图”,所以类似于 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=

    【讨论】:

      【解决方案2】:

      “桌面模式”用户代理的设计目的是,当用户故意选择桌面模式时,网络服务器不会提供移动/平板电脑界面 - 这是一种可用性反模式,将选择从用户。

      如果您绝对 *必须*覆盖用户的选择,那么在当前的 JavaScript(2013 年)中,如果以下所有条件都成立,那么它很可能是 Android 设备:

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

      但是,对于一些不太常见的浏览器设置,上述内容会产生误报和否定,例如一个基于 ARM 的带触摸屏的 ChromeBook,例如也许 Chromium 在带有 ARM 处理器的 Linux 上运行(尽管可能是 Linux/ARM),例如也许其他浏览器 Firefox/Opera 等,例如非触控式的 Android 设备,例如电视Chrome 可以在带有 ARM 处理器的 Windows RT 上运行吗?例如在 Intel 上运行的 Android。

      【讨论】:

        【解决方案3】:

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

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

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

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

        • 或者通过测试页面加载时间等找到某种解决方法...,作为一个异想天开的例子,手持设备上的浏览器通常会比桌面设备慢一点,所以在测试所有可能的移动设备之后带有something like的设备:

        -

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

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

        你明白了。

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

        【讨论】:

        • Patrick,感谢您的快速回复。安卓手机没有像苹果设备那样清楚地识别自己,这太糟糕了。 Detectmobilebrowsers.com 看起来正是我正在寻找的东西,让我试一试
        • @SemanticZen,这是一个 jsFiddledetectmobilebrowsers 准备好了。这是 jQuery 2012 年 7 月的插件版本。该小提琴修订版是 5,但请注意以前的小提琴使用不同的版本。干杯!
        • arttronics,感谢您的提琴。当我在三星 Galaxy SIII 上使用小提琴时,小提琴将其显示为移动设备。但是,当我将 userAgent 作为字符串放入测试时,它不起作用。 jsfiddle.net/bjCJu 这是一个问题,因为我需要针对不在我办公桌上的设备进行测试。
        • 解决我的小提琴问题的方法是,有时三星 SIII 看起来像一部手机,有时又不是。有时你觉得自己像个疯子,有时你不...
        • 嗯,试试这个jsFiddle,它有 Firebug Mini 以及您可以查看的 console.log 消息。您可能需要使用 Firebug Mini Clear 按钮,以确保访问 控制台选项卡。然后单击控制台中为您的特定设备动态填充的 Object。也就是说,您会看到该插件所知道的关于您的三星的所有信息。
        猜你喜欢
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 2012-10-26
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多