64

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

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

4

9 回答 9

88
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
于 2013-10-24T17:38:48.050 回答
85

使用以下代码获取 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

将返回 Android 版本 = 2.2

于 2012-09-14T08:48:57.770 回答
9

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

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

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

于 2014-04-16T21:39:33.800 回答
8

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

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

当我谷歌时,我看到 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

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

于 2011-08-25T03:11:48.697 回答
2

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

Linux;Android ; Release/4.1.2

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

[a|A]ndroid[^\d]*([\d[_|.]]+\d)
于 2014-01-23T15:05:33.777 回答
2

此代码从用户代理检查 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;
    }
}
于 2014-10-30T20:01:31.400 回答
2

我做了这个功能,并且在不同的浏览器和设备的 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”位置之后。一旦获得这些位置,'slice' 就会隔离版本号('+8' 删除最终结果的单词“android”)然后返回。

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

于 2017-01-09T22:40:08.280 回答
1

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

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

这是检查它的方法 检测 iOS / Android 操作系统

于 2016-08-17T10:49:12.723 回答
1

1- Windows 手机引入了一个假的“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]) );

于 2019-08-05T14:00:06.890 回答