区分Android Chrome和库存浏览器。 Stock浏览器的用户代理包含'Chrome'

时间:2014-07-24 06:05:23

标签: javascript android user-agent

我需要告诉用户我的网站使用的浏览器。 (编辑:用户需要添加书签,这在标准的“互联网”浏览器上是不可能的。我需要知道要向他们展示什么消息。)

编辑:我不需要能够检测到任何类型的浏览器。在这种情况下,我需要能够检测浏览器是否真的是Google Chrome浏览器

对于至少一个智能设备,我无法分辨股票'互联网'浏览器和Chrome之间的区别;两者都包含“Chrome”一词。

三星galaxy s5:

Stock浏览器用户代理:

  

Mozilla / 5.0(Linux; Android 4.4.2; zh-CN; SAMSUNG-SM-G900A Build / KOT49H)   AppleWebKit / 537.36(KHTML,与Gecko一样)版本/ 1.6 Chrome / 28.0.1500.94 Mobile   Safari浏览器/ 537.36

Chrome用户代理:

  

Mozilla / 5.0(Linux; Android 4.4.2; SAMSUNG-SM-G900A Build / KOT49H)   AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 36.0.1985.128 Mobile   Safari浏览器/ 537.36

“版本/ X.x”不同,但总会如此吗?

编辑:我确实已按照评论中的建议检查以前的答案。他们认为非Chrome浏览器不包含Chrome一词。

7 个答案:

答案 0 :(得分:8)

所以区别在于用户代理:

版/ x.x中

来自https://developer.chrome.com/multidevice/user-agent#webview_user_agent

"如果您尝试区分WebView和Android版Chrome,则应在WebView用户代理字符串中查找Version / XX 字符串的存在。 #34;

我认为Chrome浏览器webview浏览器仍然可以选择退出,但如果它有,那么至少我知道它不是谷歌Chrome浏览器!

答案 1 :(得分:3)

请检查此链接:https://developer.chrome.com/multidevice/user-agent 在最后一段中,我们发现:

  

如果您尝试区分WebView和Chrome   对于Android,您应该查找Version / X.X 的存在   WebView用户代理字符串中的字符串。

答案 2 :(得分:0)

由于我不知道股票浏览器和Chrome之间存在任何明显的功能差异,因此可以发现差异'使用用户代理字符串显示,在浏览器浏览器中声明的Chrome版本是相当多的版本。

虽然它不是最好的区别,并且股票浏览器可以随时更新,至少在目前,这可能适合您。

...你还没有真正说过如何使用它。

答案 3 :(得分:0)

(我不允许发表评论,所以我写了一个答案。)

User984003所以,如果我理解你(从你的评论中),你基本上想要一个测试,以便在移动设备上区分股票浏览器和用户安装的浏览器。你想要这个,因为它们分别在安装bookmarklet的权限的可用性方面存在差异,对吗?

然后在这个主题中讨论了这个主题:How to detect the stock Android browser(这个帖子中的简短且不尽如人意的答案是:“没有可靠且通用的方法来仅检测股票浏览器。”)

另外这里有关于在an​​droid上安装bookmarklet的方法的一些信息:http://smallbusiness.chron.com/making-bookmarklets-work-android-50685.html(也许这里有一些您不知道的替代方案,这使得尝试区分浏览器版本已经过时了。)

答案 4 :(得分:0)

阅读了很多东西,似乎它们都没有做太多,看到差异仍然是一个问题。我在网上搜索,没有解决方案。

我自己去检查了一下,发现了这个:

Differences between native and Chrome

所以我发现原生浏览器(在三星S4上)确实在“Gecko”之后添加了SamsungBrowser。

在Chrome上,它的“像Gecko”Chrome“。

紧接着“Gecko”之后,它就是“Chrome”。

因为三星将自己的字符串附加到用户代理中,所以可能可以做到这一点。

是否有可能其他设备再次出现问题?

答案 5 :(得分:0)

您可以使用JavaScript,例如

var chromeVersion = /^Google/.test(navigator.vendor) && !/ OPR/.test(navigator.userAgent) && /Chrome\/([0-9]+|$)/.exec(navigator.userAgent)[1];
var isChromeWebview = chromeVersion >= 30 && !('chrome' in window);

window.chrome在Chrome浏览器中定义(至少来自Chrome 10),但Chrome WebView中未定义(Chrome首先用于Android 4.4.x上的WebView; AOSP用于WebView for Android 4.3或更低版本。

我个人不会在生产中使用该测试(对于不同的浏览器和版本,它将是不可靠的),但是如果您将其用于非关键目的,它就能满足您的需求。

答案 6 :(得分:0)

我建议这样的事情:

function testForAndroidChrome() {
    var version = navigator.appVersion;
    if (version.indexOf('(KHTML, like Gecko) Chrome' != -1) {
        return true; // it's Chrome
    } else {
        return false; // it's the stock browser
    }
}

var myTest = testForAndroidChrome(); // returns true or false