如何针对Chrome专门检测Chromium?

daG*_*GUY 9 user-agent google-chrome detection chromium

有没有办法检测我网站的访问者是否运行Chromium而不是谷歌浏览器?即使是基本的UA嗅探(我知道这是不好的做法)也足以满足我的特殊情况,但看起来Chromium和Chrome 共享相同的UA字符串 - 这是正确的吗?有没有其他方法可以区分两者?

Jos*_*osh 8

从 Chromium 84 开始,有一种名为 User-Agent Client Hints参考的新方法

您可以检查 userAgentData 属性是否存在并查找品牌数据。它将返回一个看起来像这样的数组。

[{
    "brand": " Not;A Brand",
    "version": "99"
}, {
    "brand": "Google Chrome",
    "version": "91"
}, {
    "brand": "Chromium",
    "version": "91"
}]
Run Code Online (Sandbox Code Playgroud)

userAgentData.brands 将包含不同顺序的不同值,因此不要依赖于某个索引中出现的内容。相反,检查该属性是否存在于数组中。

if (navigator.userAgentData) {
    let vendors = window.navigator.userAgentData.brands;
    if (vendors.filter(e => e.brand === 'Google Chrome').length > 0) {
        console.log('Chrome')
    } else {
        console.log('Chromium')
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 该功能到 2021 年 10 月仍然有效。 (2认同)

Ste*_*ger 7

新的 Chromium 版本也有 PDF 插件。
但是他们也有 Chromium 插件,所以如果任何插件以“Chromium”开头,那就是 Chromium:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

此外,使用它来识别 Microsoft Chredge(又名阿纳海姆)

function isEdg()
{ 

    for (var i = 0, u="Microsoft Edg", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*b W 5

Chrome附带内置PDF阅读器,Chromium没有.
您可以使用JavaScript检测到这一点:

function isChrome() { // Actually, isWithChromePDFReader
    for (var i=0; i<navigator.plugins.length; i++)
        if (navigator.plugins[i].name == 'Chrome PDF Viewer') return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

此方法不是100%可靠,因为用户可以将PDF阅读器二进制文件从Chrome复制到他们的Chromium目录,请参阅Ask Ubuntu上的这个答案.

Chromium和Chrome之间几乎没有区别(当然不会在渲染或JavaScript引擎中),所以为什么要发现差异呢?