JavaScript检测安卓原生浏览器

11
我希望使用JavaScript检测原生的Android浏览器(即安装在每个Android手机上的浏览器)。

我应该在useragent中查找什么?


1
并非所有的东西都是通用的。一些Android手机会伪装成iPhone,并使用iPhone的用户代理。 - Raptor
我不理解“特征检测”,你能否解释一下? - Razvan
特征检测并不适用于每种情况。如果您检查/Android/i的用户代理字符串,您会有一些运气,但这并不表示它是哪个版本的webkit。 - nym
4个回答

16

这应该可以工作。

var nua = navigator.userAgent;
var is_android = ((nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 &&     nua.indexOf('AppleWebKit') > -1) && !(nua.indexOf('Chrome') > -1));

似乎在Android 4.4+上不起作用(他们更改了原生浏览器)。 - Chambeur

8

原生浏览器,我们不能在第一次使用上述代码时检测到。

var nua = navigator.userAgent;
var is_android = ((nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 &&     nua.indexOf('AppleWebKit') > -1) && !(nua.indexOf('Chrome') > -1));

对于大多数设备,我们在Chrome浏览器的用户代理中得到以下信息:

enter image description here 而在原生浏览器中我们得到以下信息:

enter image description here 我们对三款手机进行了检查,分别为三星Galaxy S3、HTC Desire和华硕Zenfone 5。
我们发现,大多数设备(包括Zenfone 5和三星Galaxy S3)的用户代理对象中都有“Chrome/30.0.0.0”或“chrome/”,但如果用户代理对象中没有“version/”,那么就足以区分原生浏览器和Chrome。
我们使用了以下代码:
var ua = navigator.userAgent;
var is_native_android = ((ua.indexOf('Mozilla/5.0') > -1 && ua.indexOf('Android ') > -1 && ua.indexOf('AppleWebKit') > -1) && (ua.indexOf('Version') > -1));

希望这对你也有用... :)

这对于Android 5.1.1的原生浏览器仍然适用吗?因为我只能到达var is_native_android = ua.indexOf("android") > -1 && ua.indexOf("mobile") && ua.indexOf('chrome') > -1,但所有其他标识符似乎都失败了。看起来原生浏览器正在使用AppleWebkit - Mozilla/5.0。 - cptstarling
这似乎在旧版和新版的Android原生浏览器上都能正常工作。 - dvlden
这在Android 6.0.1上不起作用(至少在我的美国T-mobile S6上不起作用)。本机浏览器现在基于Chrome,很难区分。我看到的唯一区别是制造商特定的词语(对我来说,它几次说了三星)。我朋友的S7甚至没有本机浏览器,现在Chrome是该手机的本机浏览器。但好的是,我想这已经不重要了,因为两者应该是相似的。 - Francisc0

3
请参见此页面,以了解不同的用户代理字符串。

我不确定为什么你被踩了,那是一个好的资源。 - nym

-3
尝试像这样做:

试着这样写:

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
  // Do something
}

或者

请查看此链接: http://davidwalsh.name/detect-android


这也将适用于安卓上的Firefox。 - fnagel
这只是检测操作系统,与用户提出的问题无关。 - mummybot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接