我需要在更新的Android设备上区分原生(Android)浏览器和谷歌浏览器,但仍然遇到问题,特别是最新的三星设备(Galaxy S4,Galaxy S4 mini和Galaxy Mega)。
我们内部有一些设备检测,它分析从浏览器发送的用户代理,以尝试确定正在使用哪个浏览器。传统上,为了检测Chrome,代码会在用户代理中查找“Chrome”或“CriOS”,通常这些代码存在于用户代理字符串的最后部分(根据用户代理上的Wikipedia article,用于表示可用的增强功能。)
直到最近,这项工作没有问题*。
在运行Android 4.2.2的最新三星Galaxy设备(如上所列)上,原生浏览器在用户代理字符串中返回“Chrome”。从围绕这个主题的一些简短阅读来看,这是因为本机浏览器使用Chromium(我承认,我不明白Chromium和Chrome之间的差异,直到我阅读了一下主题,更多信息here)
这也会导致使用建议here的Chrome功能检测无效。
这个问题的主要问题是我们看到两个浏览器之间存在轻微的渲染差异,我们通常会使用浏览器特定的CSS黑客攻击**,我们现在无法使用它们。
到目前为止,我们只在三星Galaxy设备上看到过此问题,在运行Android 4.2.2的Nexus 4上进行测试后,本机浏览器不会将Chrome作为用户代理的一部分返回。这可能是运行Android 4.2.2的三星Galaxy设备特有的问题,但在这个时刻,我们没有足够广泛的设备可供测试。
有没有人知道如何在不使用上述两种方法的情况下可靠地区分两种浏览器?
*没有任何我们注意到或已向我们报告过的问题。
**是的,我知道使用黑客攻击并不是最好的做事方式,但是当它或者重写大量的代码时,黑客往往会胜出。