【问题标题】:Pick up the Android version in the browser by Javascript通过Javascript在浏览器中获取Android版本
【发布时间】:2011-11-03 07:35:30
【问题描述】:

我正在构建一个网络应用,并希望在 3.0 版以下的 Android 设备上禁用过渡效果。

有没有办法在浏览器中通过Javascript获取Android版本号?如果有怎么办?

【问题讨论】:

  • 如果你在cordova上,你可以使用device.version

标签: javascript android browser android-api-levels


【解决方案1】:
function getAndroidVersion(ua) {
    ua = (ua || navigator.userAgent).toLowerCase(); 
    var match = ua.match(/android\s([0-9\.]*)/i);
    return match ? match[1] : undefined;
};

getAndroidVersion(); //"4.2.1"
parseInt(getAndroidVersion(), 10); //4
parseFloat(getAndroidVersion()); //4.2

【讨论】:

  • parseFloat 只接受一个参数,所以最后不需要,10。 (我会自己编辑,但编辑必须更改至少 6 个字符。)
  • parseFloat only takes one argument:已修复
  • 从 andy 下面的评论中,用户代理可以是:"Linux;Android ; Release/4.1.2" 这意味着这在摩托罗拉设备上会失败。
  • 我觉得你应该在最后加上, 10,否则如果数字以0开头,它会将其解析为八进制数。只需尝试执行以下命令:alert(parseInt(021))。你会看到 17,而不是 21
  • 我同意 user1613797,parseInt 接受第二个可选参数,即基数/基数。将其指定为 10 有助于以 0 开头的数字并确保它们不被视为八进制数
【解决方案2】:

使用以下代码获取 2 位数的 Android 版本

var ua = navigator.userAgent;
if( ua.indexOf("Android") >= 0 )
{
  var androidversion = parseFloat(ua.slice(ua.indexOf("Android")+8)); 
  if (androidversion < 2.3)
  {
      // do whatever
  }
}

例如

Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

将返回 安卓版本 = 2.2

【讨论】:

  • 如果您喜欢我的回答并对您​​有用,请投票并接受回答
  • 当您对输入字符串几乎一无所知时,使用 indexOf + 8 是一种非常糟糕的做法。
  • @Alexey 脚本已经检查了字符串中是否存在 Android(第 2 行)。所以我不同意这是一个盲目的 indexOf 操作,因为它总是会返回标记 Android 字符串结尾的位置加上一个字符。
【解决方案3】:

我无法发表评论,因为我没有足够的代表... 只是想补充一点,我必须将 neiker 的代码更改为

var match = ua.match(/Android\s([0-9\.]*)/i);

使其不区分大小写,因为 Galaxy S3 在其用户代理中返回“android”而不是 Android

【讨论】:

    【解决方案4】:

    您可以查看此处描述的用户代理字符串 - window.navigator.userAgenthttps://developer.mozilla.org/en/DOM/window.navigator.userAgent

    如果您真正想要检测的是您是否拥有支持特定功能的浏览器版本,那么使用功能检测而不是浏览器版本检测几乎总是更好。 modernizr 是一个用于特征检测的庞大代码库,您可以按原样使用它,也可以从中借用一个特定的部分,或者只是学习一般技术的工作原理。

    当我 Google 时,我看到 Android 的用户代理字符串如下:

    Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
    

    window.navigator.userAgent 上的 /Android\s+([\d\.]+)/ 正则表达式将获取 Android 版本号。

    【讨论】:

    • 是的,我猜的太多了,但是正在寻找代码:) 我不想弄错。那里有很多安卓设备,我猜它们都不一样。
    • 我建议您在谷歌上搜索各种用户代理列表。有些页面显示了用户代理的数量。我在我的答案中添加了一段关于特征检测的功能可能会更好。
    • 没有不寻找特征检测。 jquery 移动转换工作正常,只是在较旧的 android 设备上运行缓慢。不过还是谢谢。
    • 您的特殊情况更多是关于“性能检测”。您需要的是通过 CSS3 本地完成的 CSS3 过渡,而不是在不支持 CSS3 时使用带有 jQ​​uery 回退的 JS。我编写了一个幻灯片,其中包含非常精美的 CSS3 过渡,适用于所有版本的 Android 设备。您可能想查看:addyosmani.com/blog/css3transitions-jquery.
    • 谢谢,但我相信 jQuery mobile 已经使用 CSS3 进行转换。
    【解决方案5】:

    摩托罗拉的播放器用户代理可以有以下内容:

    Linux;Android ; Release/4.1.2
    

    所以,我不得不开始使用以下正则表达式:

    [a|A]ndroid[^\d]*([\d[_|.]]+\d)
    

    【讨论】:

      【解决方案6】:

      此代码从用户代理检查 Android 的完整版本。

      var test = LowerThanAndroidVersion('4.4');
      if (test) {
          alert('lower than android 4.4')
      } else if (test == undefined) {
          alert('no android')
      } else {
          alert('android 4.4 or higher');
      }    
      
      function LowerThanAndroidVersion(testversion) {
          //var useragent = 'Mozilla/5.0 (Linux; U; Android 4.3.1; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';
          var useragent = navigator.userAgent;
          var androidpoint = useragent.indexOf('Android');
          if (androidpoint >= 0) {
              var rest = useragent.substring(androidpoint + 8, useragent.length);
              var version = rest.substring(0, rest.indexOf(';'));
              return (version < testversion) ? true : false;
          }
      }
      

      【讨论】:

      • 请解释你的答案。 SO 的存在是为了教学,而不仅仅是回答问题。
      【解决方案7】:

      我做了这个功能并且在不同的浏览器和设备的Android 2.6.3, 4.2.2., 6.0.1 中运行良好。我认为这可以作为替代方案。

      function check_android_version()
      {
          var ua = navigator.userAgent; 
          ua = ua.toLowerCase();
      
          var and_pos = ua.search("android");
          if(and_pos == -1)
              return 0; //not android
      
          var pv_pos = ua.indexOf(";", and_pos);
          var versao = ua.slice(and_pos+8, pv_pos);
      
          return versao;
      }
      

      这很简单,首先,搜索“android”这个词。如果未找到,则返回 0(不是 Android 用户代理)。然后搜索第一个';'在标记版本结束的“android”位置之后。一旦获得这些位置,“切片”就会隔离版本号(“+8”会删除最终结果中的“android”一词),然后返回。

      如果有人发现任何缺陷,很高兴分享。

      【讨论】:

        【解决方案8】:

        最好先检查设备是否为 android,因为 Windows mobile 可以在其用户代理中使用 Android。

        示例: Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; ; ) AppleWebKit/ (KHTML, like Gecko) Chrome/ Mobile Safari/ Edge/.

        这是检查它的方法 Detecting iOS / Android Operating system

        【讨论】:

        • 虽然链接可能会回答问题,但最好始终将该链接中的关键信息添加到答案中,以防链接不复存在。
        【解决方案9】:

        1- Windows phone 引入了一个假的“android”用户代理,所以这个处理它
        2- 正如@andy 指出的那样,有一些模型采用这种格式:Android/#.##
        3- 您可以使用标志 /i 来区分大小写
        4- 此代码在它不是 android 时返回 NaN,在它是时返回版本作为浮点数。
        5- 如果你发现更多假安卓手机,你只需要添加这样的字符串:(?:windows phone|fake phone|android............

        alert( parseFloat(navigator.userAgent.match(/.*?(?:windows phone|android\D+([0-9\.]*))|()/i)[1]) );

        【讨论】:

          猜你喜欢
          • 2017-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-27
          • 2022-06-12
          • 2016-03-21
          • 1970-01-01
          相关资源
          最近更新 更多