繁体   English   中英

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

[英]Distinguish Android Chrome from stock browser. Stock browser's user agent contains 'Chrome'

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

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

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

三星galaxy s5:

股票浏览器用户代理:

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

“版本/ Xx”是不同的,但总是如此吗?

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

所以区别在于用户代理:

版本/ XX

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

“如果你试图区分WebView和Android版Chrome,你应该在WebView用户代理字符串中查找Version / XX字符串的存在。”

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

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

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

由于我不知道股票浏览器和Chrome之间存在任何明显的功能差异,因此与用户代理字符串“发现差异”显示,在浏览器浏览器中显示的Chrome版本有很多版本。

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

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

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

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

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

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

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

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

原生和Chrome之间的差异

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

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

因此,在“Gecko”之后,它就是“Chrome”。

也许这可以解决问题,因为三星将自己的字符串附加到用户代理中。

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

你可以使用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用于Android 4.3或更低版本的WebView) 。

我个人不会在生产中使用该测试(对于不同的浏览器和版本,它将是不可靠的),但是如果您将其用于非关键目的,它会执行您想要的操作。

我推荐这样的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM