android - studio - setsupportactionbar




如何检测Android浏览器的库存 (9)

“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

导航到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

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


efusien的回答(2013年11月11日20:18)对我有用 ,虽然没有声明变量,并且在一个地方使用逗号而不是分号, 这导致任何寻找副本的人都失败了/粘贴答案

以下是对我有用的内容,包括使用“if it is the native browser”条件的实际示例:

var navU = navigator.userAgent;
// Android Mobile
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
// Android Browser (not Chrome)
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
var isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537;

$(window).load(function() {
    if (isAndroidBrowser) {
        // It's Android's native browser (and not Chrome), so do something
    }
});

参考Nick和efusien的答案。 这适用于Android OS 4.4.2

// Native Android Browser
var navU = navigator.userAgent;
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
var regExChrome = new RegExp(/Chrome\/([\d.]+)/);
var resultChromeRegEx = regExChrome.exec(navU);
var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1]));
var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion >= 537) && (chromeVersion !== null && chromeVersion < 29);

因为现在在Kitkat上,当我们登录userAgent时,Android上的原生浏览器使用与Chrome相同的WebKit 537.36。 通过检查chromeVersion <29然后我可以在Android 4.4.2上获得本机浏览器。 (我的三星S4上的Chrome版本现在是40)。

在此链接中查看不同Android版本的WebKit表: http://jimbergman.net/webkit-version-in-android-version/http://jimbergman.net/webkit-version-in-android-version/


如果您可以使用JavaScript代替服务器端UA嗅探,请尝试(!!window.chrome) && (!window.chrome.app)但是,我不能保证这个“安全”,“永远”工作,或类似的东西。 将它视为仅用于测试目的的恶意黑客。

说明:Chrome(或Chromium?)浏览器(嗯,我在这里测试的那些,Cyanogenmod 10上的Chrome和Android库存)有一个名为window.chrome的对象,但在Android股票浏览器上,我至少测试过,此对象没有app属性。

编辑:似乎较旧的Chrome版本会对此解决方案产生误报。 反过来,新版本的股票浏览器很可能会给出“假阴性”。



我想你正在寻找这个:

Android原生浏览器未在版本534.30上更新,因此您可以过滤到版本和Android UA字符串组合(上面我们可以假设它是Chrome浏览器)

这是我的示例JavaScript代码:

(如果你需要特定的样式,我会使用以下JS片段向主体添加一个类)

var defectAndroid = $window.navigator && $window.navigator.userAgent.indexOf('534.30') > 0 && $window.navigator.userAgent.toLowerCase().match(/android/);

if (defectAndroid) {
   // sample code specific for your Android Stock browser
}

(一些Android设备报告'android',这就是我们需要小写对话的原因)


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

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

我是一个活跃的移动终端网络应用程序开发团队,看起来TouchWiz在开发的不同方面引发了很多问题。

另一个问题是像Dolphin这样的公司(伟大的浏览器,糟糕的UA)在所有这些情况下都会弹回作为默认浏览器,因为它不提供“dolphin”字符串并使用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_notationshttp://en.wikipedia.org/wiki/User_agent#Encryption_strength_notations


看起来“Linux; U; Android”的存在是股票浏览器的一贯差异化因素。 谁知道“U”的意思,但我怀疑它将来会不可靠。 希望当字符串发生变化时,浏览器会消失或开始像Chrome一样播放。 下面还有一些其他字符串用于比较

Android Chrome:“Mozilla / 5.0(Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 28.0.1500.94 Mobile Safari / 537.36”

Android Firefox:“Mozilla / 5.0(Android; Mobile; rv:23.0)Gecko / 23.0 Firefox / 23.0”

Android Opera:“Mozilla / 5.0(Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build / JZO54K)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 28.0.1500.63 Mobile Safari / 537.36 OPR / 15.0.1162.61541”


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);




android-browser