如何针对Chrome专门检测Chromium?

时间:2013-06-24 15:05:56

标签: google-chrome user-agent detection chromium

有没有办法检测我网站的访问者是否正在运行Chromium而不是Google Chrome?即使是基本的UA嗅探(我知道这是不好的做法)也足以满足我的特殊情况,但看起来Chromium和Chrome share the same UA string - 是正确的吗?还有其他方法可以区分两者吗?

5 个答案:

答案 0 :(得分: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;
}

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

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

答案 1 :(得分:4)

新的Chromium版本也有PDF插件。
但他们也有Chromium-plugins,所以如果任何插件以“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;
}

答案 2 :(得分:2)

以下是Paul W.的答案的变体,适用于Chromium 42及以上版本:

function isChromium() { // Actually, isWithChromiumPDFReader
    for (var i=0; i<navigator.plugins.length; i++)
        if (navigator.plugins[i].name == 'Chromium PDF Viewer') return true;
    return false;
}

这当然只有在用户没有禁用该插件的情况下才有效。

答案 3 :(得分:0)

这是使用SpeechSynthesis功能的另一种方式。

Google Chrome浏览器附带了TTS语音,而Chromium浏览器(包括Brave)则没有。可以使用espeak(在Linux上)手动安装语音,但是 Google语音都以Google开头,而手动安装的语音则没有。据我所知,Chrome的声音是适当的,不是免费的。

声音的集合是一个数组,其中每个声音如下所示:

{
    voiceURI: "Google Deutsch",
    name: "Google Deutsch",
    lang: "de-DE",
    localService: false,
    default: true
}

我们只需要找到一个名字/ URI以 Google ...

function hasGoogleVoices() {
    return window.speechSynthesis.getVoices()
      .some(v => /^google/i.test(v.name));
}

(在Linux,Chrome,Brave,Chromium和Firefox上进行了测试) 请有人可以检查Safari和Windows。谢谢。

答案 4 :(得分:0)

从 Chromium 84 开始,有一种名为 User-Agent Client Hints reference

的新方法

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

[{
    "brand": " Not;A Brand",
    "version": "99"
}, {
    "brand": "Google Chrome",
    "version": "91"
}, {
    "brand": "Chromium",
    "version": "91"
}]

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')
    }
}