如何从用户代理字符串中找出Android设备(4.x版本)

时间:2012-12-23 14:11:58

标签: javascript android ruby browser

Android设备是用户代理字符串的一部分:

Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Opera/9.80 (Android 4.0.3; Linux; Opera Mobi/ADR-1212030829) Presto/2.11.355 Version/12.10

Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SAMSUNG-SGH-I317 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

但是,当将字符串拆分为;时,设备可能驻留在不同的索引中(有时它不存在)。有没有一种简单的方法可以在Javascript / Ruby中获取设备名称

更新:只是为了澄清:我有兴趣获取设备名称,而不是Android /版本

2 个答案:

答案 0 :(得分:0)

如果它不在那里,就没有办法让它在那里..如果它是“Android x.y.z;”的形式,正则表达式是你的朋友

假设“user_agent”包含用户代理字符串:

Ruby,例如

user_agent[/Android (.*?);/]

变量$ 1将包含版本。

的Javascript

var version = user_agent.match("Android (.*?);")[1];

答案 1 :(得分:0)

如果您只是想知道它是否是Android设备,那么Javascript代码可能很简单:

function isAndroid() {
    var ua = navigator.userAgent.toLowerCase();
    return (ua.indexOf("android") > -1);
}

如果您对版本感兴趣,请尝试以下Javascript代码:

function getAndroidVersion() {
    var androidVersion = -1; // def value, for non-Android devices
    var ua = navigator.userAgent.toLowerCase();
    var androidIndex = ua.indexOf('android');

    if(androidIndex != -1) {
        var versionStartIndex = androidIndex + 8;
        var versionEndIndex = ua.indexOf(';', versionStartIndex);

        androidVersion = parseFloat(ua.slice(versionStartIndex, versionEndIndex));
    }

    return androidVersion;
}