通过Javascript在浏览器中选择Android版本

Dan*_*yan 61 javascript browser android android-api-levels

我正在构建一个Web应用程序,并希望在3.0版本的Android设备上禁用转换效果.

反正有没有在浏览器中通过Javascript获取Android版本号?如果是这样的话?

Goh*_*ran 83

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

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

例如

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

将返回Android版本= 2.2

  • 当你对输入字符串几乎一无所知时,使用indexOf + 8是一个非常糟糕的做法. (6认同)

nei*_*ker 82

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
Run Code Online (Sandbox Code Playgroud)

  • `parseFloat`只接受一个参数,所以最后不需要`,10`.(我自己编辑,但编辑必须更改至少6个字符.) (5认同)
  • 我认为你最后应该添加`,10`,否则如果数字以0开头,它会将其解析为八进制数.只是尝试执行以下命令:`alert(parseInt(021))`.你会看到17,而不是21 (2认同)

jfr*_*d00 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
Run Code Online (Sandbox Code Playgroud)

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

  • 我建议你为各种用户代理列表做一些谷歌搜索.有些页面显示了许多用户代理.您可能会更好地使用功能检测,我在回答中添加了一个段落. (2认同)
  • 您的具体案例更多是关于"性能检测".你需要的是CSS3过渡,这是通过CSS3本地完成的,而不是在不支持CSS3的情况下使用JS和jQuery后备.我写过一个幻灯片,里面有非常奇特的CSS3过渡,适用于所有版本的Android设备.您可以查看:http://addyosmani.com/blog/css3transitions-jquery/. (2认同)

jor*_*314 8

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

var match = ua.match(/Android\s([0-9\.]*)/i);
Run Code Online (Sandbox Code Playgroud)

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