如何检测Android浏览器的库存

gsi*_*011 46 user-agent android android-browser

导航到http://whatsmyuseragent.com/向我显示运行4.2.1的Galaxy Nexus上我的股票Android浏览器有用户代理

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
Run Code Online (Sandbox Code Playgroud)

此用户代理中没有任何内容允许我唯一地检测到它是一个Android浏览器.Chrome for Android应用程序至少具有androidUA功能.有什么方法可以让我发现Android应用程序的存量吗?

efu*_*ien 28

var navU = navigator.userAgent;

// Android Mobile
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;

// Apple webkit
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));

// Chrome
var regExChrome = new RegExp(/Chrome\/([\d.]+)/);
var resultChromeRegEx = regExChrome.exec(navU);
var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1]));

// Native Android Browser
var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 537) || (chromeVersion !== null && chromeVersion < 37);
Run Code Online (Sandbox Code Playgroud)

  • 我把它抽象为`var rxaosp = window.navigator.userAgent.match(/Android.*AppleWebKit\/([\ d.] +)/); var isaosp =(rxaosp && rxaosp [1] <537);` (4认同)
  • 此代码缺少对引用[此处](https://developer.chrome.com/multidevice/user-agent#webview_user_agent)的"版本"的检查:"如果您尝试将WebView和Chrome区分开来Android,您应该在WebView用户代理字符串中查找Version/_X.X_字符串的存在.不要依赖于特定的Chrome版本号(例如,30.0.0.0),因为版本号随每个版本而变化".我知道它说WebView,但三星手机的大部分都会有版本/ _x.x_. (2认同)

Tel*_*iRE 16

"Android Browser"是浏览器的名称.也许会感到困惑,但是有了这样的问题,它不应该.它是绝大多数Android设备附带的浏览器,他显然不是在谈论Chrome.

根据http://www.useragentstring.com/,这是Android Stock Browser字符串的完整列表.我目前不确定是否有更好的方法可以同时选择所有这些内容,因为有些内容会继续添加,而且不会在Android上意外定位Chrome.希望有人能给你一个更好的答案,因为我很好奇自己最好的方法.

Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9

Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari

Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile

Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

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

Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.2.1; de-de; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.1-update1; es-mx; SonyEricssonE10a Build/2.0.A.0.504) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17

Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
Run Code Online (Sandbox Code Playgroud)

  • 请注意,2015年**默认情况下,大多数Android设备都附带Chrome** (3认同)

rob*_*cat 13

您可以通过在useragent中查找"Android"并检查AppleWebKit/###版本号来区分股票浏览器和Chrome浏览器之间的区别.

Android浏览器的价格从未高于534,Chrome为537或更高.

var maybeAndroid = navigator.userAgent.indexOf('Android') >= 0;
var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.appVersion)[1], 10); // also matches AppleWebKit
var isAOSP = maybeAndroid && webkitVer <= 534 && navigator.vendor.indexOf('Google') == 0;
Run Code Online (Sandbox Code Playgroud)

这是99%可靠,对于使用WebView的Android 4.x上的应用程序非常有用.

==详细信息(如果你想深入探讨!)==

编辑7:'AudioNode' in window对于AOSP(或旧版Chrome)而言,与现代Chrome版本相比,可能是一种安全的嗅探.在这里试试吧.window.AudioNode是作为Chrome 29中WebAudio支持的一部分引入的(并且不太可能被制造商反向移植).我们的4.0.3的手机上有铬41,并'AudioNode' in window返回trueChrome和false为AOSP.您还可以嗅探AOSP完成开发后引入的其他功能 - 请参阅此链接以了解其他可能的功能.选择Chrome 42之前推出的功能,因为Android 4.0用户无法升级该版本.像往常一样,Android肯定存在奇怪的边缘情况,但是这种嗅探可能与你能得到的一样好(特别是如果结合检查WebKit版本<537).

编辑8:

== Android上的WebView ==

在应用程序中使用WebView时,检查<= 534是一个完美的测试.Android 4.3(最后一个使用AOSP for WebView的Android版本)的兼容性定义表示,WebView用户代理必须是:" Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30".

Android 4.4(第一个使用Chromium for WebView的Android版本)的兼容性定义表示,WebView用户代理必须是:" Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36".

低于Android 4.3非常类似于4.3定义(总是AOSP).大于4.4非常类似于4.4定义(总是Chromium).

== Android上的AOSP ==

对于设备上的浏览器(而不是WebView),兼容性定义不禁止用户代理.实际使用的浏览器版本变化为大量记录怪异模式,并作为记录的三星浏览器版本.

编辑4:推荐的解决方案是在用户代理中查找不含Chrome的Android,如下所示:https://developer.chrome.com/multidevice/user-agent#webview_user_agent但是也可能需要确保缺少/ Windows手机/因为Mobile-IE11-8.1-Update也有UA中的Android" Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537".编辑5:https://msdn.microsoft.com/en-us/library/hh869301(v = vs.85).aspx显示Windows Phone上的IE12仍将在用户代理中安装Android.

编辑3:正如评论者所说,有些设备有AOSP和> = 535,但这是我发现的最可靠的测试(我希望看到更好的东西).如果嗅探失败,您可以尝试确保您的代码仍然有效,并接受Android碎片意味着会有奇数设备失败.买者自负.编辑6:查看特定网站的一些数据大约1%的AOSP登录具有WebKit 537,因此虽然看起来相当可靠,但它绝对不是100%可靠.

编辑2:如果您在应用程序中使用WebView,则此检测对Android> = 4.0 && Android <4.4.4非常有用,因为即使在设备上安装了Chrome,WebView组件也会使用AOSP.

编辑1:由于原生android现在已经"过时",因此测试它是合理的(并使用该标志来解决使用特征检测无法检测到的差异).

  • 三星Galaxy S4 mini的AppleWebKit/535.19用于股票浏览器...... (2认同)
  • 这会将Chrome报告为股票浏览器 (2认同)

小智 5

截至目前,还没有真正的方法来检测这一点。我目前使用的是 Android 4.2.2 股票 Galaxy S4 AT&T,默认浏览器现在在用户代理中有 Chrome(但仍然修复了 TouchWiz 位置问题)

在三星可以 a) 修复 touchwiz 或 b) 从 ua 字符串中删除 chrome 之前,我们没有真正的方法来检测 android 默认浏览器。我不能说所有 4.2x + 手机是否都是这种情况,但这对于需要制造商/浏览器特定查询的开发团队来说是一个大问题。

我是一个活跃的移动端 Web 应用程序开发团队的一员,似乎 TouchWiz 对正在开发的不同方面造成了很多问题。

另一个问题是像 Dolphin(很棒的浏览器,糟糕的 UA)这样的公司在所有这些情况下都会作为默认浏览器弹出,因为它不提供“海豚”字符串并使用 AppleWebKit534x


另外关于用户代理字符串中的 U 与浏览器无关。事实上,这与每个浏览器使用的加密方法有关(通常是基于位置的标准)

“在美国创建的 Web 浏览器,例如 Netscape Navigator 和 Internet Explorer,使用字母 U、I 和 N 来指定用户代理字符串中的加密强度。直到 1996 年,美国政府不再允许使用密钥进行加密超过 40 位要导出,供应商提供各种不同加密强度的浏览器版本。“U”代表“USA”(128 位加密版本),“I”代表“国际”——浏览器有 40-位加密,可以在世界任何地方使用——“N”(事实上)代表“无”(无加密)。[10] 随着出口限制的解除,大多数供应商都支持 256 位加密。”

来源:http : //en.wikipedia.org/wiki/User_agent#Encryption_strength_notations