我如何专门检测 Chromium 与 Chrome?

     2023-02-18     122

关键词:

【中文标题】我如何专门检测 Chromium 与 Chrome?【英文标题】:How do I detect Chromium specifically vs. Chrome? 【发布时间】:2013-06-21 03:42:15 【问题描述】:

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

【问题讨论】:

【参考方案1】:

新的 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;

此外,使用它来识别 Microsoft Chredge(又名 Anaheim)

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;

【讨论】:

【参考方案2】:

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 引擎中),那你为什么要发现区别呢?

【讨论】:

谢谢!我猜你的意思可能是navigator.plugins[i].name? (转移s。:p) 毫无价值,这仅适用于桌面版 Chrome。 很遗憾,我的 Mac 版 Chromium 39 返回“true”!【参考方案3】:

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

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;

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

【讨论】:

这对我在 Chrome 94.0.4606.81 上不起作用。它返回 true 而它是 Chrome,而不是 Chromium!【参考方案4】:

这是另一种方式,使用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。谢谢。

【讨论】:

在 2021/10 年在 Windows 7 上的 Chrome 94 上测试。它有效!【参考方案5】:

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

【讨论】:

这在 2021 年 10 月仍然有效。【参考方案6】:

无法对 https://***.com/a/68428992/14238203Josh Answer 发表评论。

在最新的 Chrome 和 Chromium(2021 年 10 月)上,一些解决方案对两者都返回 true,因此我必须找到不同的解决方案。

我采用了https://***.com/a/63724166/14238203 Fliptopbox 代码并实现了 Josh 的回答。

const isChrome = navigator.userAgentData.brands.some((v) =&gt; /^google/i.test(v.brand));

Josh 回答的问题是,如果您在加载页面时尝试此操作,getVoices() 会返回空数组,直到加载所有声音(页面加载完成) 这里的承诺解决方案 - https://***.com/a/59786665/14238203

对于我的用例,getVoices() 有点麻烦,所以我使用了用户代理提示解决方案。

【讨论】:

如何在 chrome 或 chromium 中禁用 HTTP/2?

】如何在chrome或chromium中禁用HTTP/2?【英文标题】:HowtodisableHTTP/2inchromeorchromium?【发布时间】:2017-07-1502:48:36【问题描述】:我正在尝试调试HTTP/1.1和HTTP/2之间的差异。是否有可能在chrome或chromium中禁用HTTP/2?我在chrome56中找不到... 查看详情

为啥 ChromeDriver 不需要 Chrome 或 Chromium?

】为啥ChromeDriver不需要Chrome或Chromium?【英文标题】:Whydoesn\'tChromeDriverrequireChromeorChromium?为什么ChromeDriver不需要Chrome或Chromium?【发布时间】:2018-12-0800:32:05【问题描述】:即使我没有安装Chrome或Chromium,ChromeDriver仍在我的系统... 查看详情

Chrome 如何检测信用卡字段?

】Chrome如何检测信用卡字段?【英文标题】:HowdoesChromedetectCreditCardfields?【发布时间】:2013-02-1613:48:59【问题描述】:在某些表单中,Chrome自动填充会提示信用卡自动填充。编辑:添加屏幕截图。这与浏览器自动完成不同。您之... 查看详情

您如何在移动 safari 上检测 3G 与 Wifi 连接?

】您如何在移动safari上检测3G与Wifi连接?【英文标题】:Howdoyoudetect3Gvs.Wificonnectiononmobilesafari?【发布时间】:2012-01-2518:02:19【问题描述】:我专门询问移动网页上的javascript,而不是Objective-C应用程序。是否有类似AppleReachabilityforj... 查看详情

如何使 Firefox 的画布与基于 Chromium 的浏览器中的行为相同?

】如何使Firefox的画布与基于Chromium的浏览器中的行为相同?【英文标题】:HowtomakeFirefox\'scanvasbehavethesameasinChromium-basedbrowsers?【发布时间】:2021-11-1002:31:18【问题描述】:在基于Chromium的浏览器中(我正在使用勇敢),canvas是这... 查看详情

您如何在桌面和移动 Chrome 用户代理之间进行检测?

】您如何在桌面和移动Chrome用户代理之间进行检测?【英文标题】:HowdoyoudetectbetweenaDesktopandMobileChromeUserAgent?【发布时间】:2014-10-1304:05:19【问题描述】:对于Chrome桌面扩展主页,我正在尝试检测用户是在Android上使用ChromeforDeskt... 查看详情

chrome如何显示网页

...更高的层或者需要更高层次的相关信息。WebKit?:Safari、Chromium和任何其他基于Webkit的浏览器的渲染引擎。Port是WebKit的一部分,它与依赖于系统服务的平台集成,如资源加载和图形。Glue:转换Webkit类型成Chromium类型。这是我们的We... 查看详情

如何使用更改和删除事件在 firefox 和 chrome/chromium 上上传和列出目录

】如何使用更改和删除事件在firefox和chrome/chromium上上传和列出目录【英文标题】:Howtouploadandlistdirectoriesatfirefoxandchrome/chromiumusingchangeanddropevents【发布时间】:2017-02-0113:03:04【问题描述】:mozilla和webkit浏览器现在都允许上传目... 查看详情

Selenium 在 Fedora 35 中使用 chromium 而不是 google-chrome,如何设置 google-chrome?以及如何设置具体的下载文件路径?

】Selenium在Fedora35中使用chromium而不是google-chrome,如何设置google-chrome?以及如何设置具体的下载文件路径?【英文标题】:Seleniumusechromiuminsteadofgoogle-chromeinFedora35,howcanIsetgoogle-chrome?Andhowsetaspecificdownloadfileroute?【发布时间】:2022-0... 查看详情

Chrome、Chromium、Firefox 在 QtWebApp 上两次请求页面

】Chrome、Chromium、Firefox在QtWebApp上两次请求页面【英文标题】:Chrome,Chromium,FirefoxrequestingpagetwiceonQtWebApp【发布时间】:2014-02-0710:21:42【问题描述】:我正在尝试使用QtWebApp创建一个简单的Web应用服务器,但Chrome、Firefox和chromium总... 查看详情

Chrome/Chromium 中奇怪的对角线(错误?)

】Chrome/Chromium中奇怪的对角线(错误?)【英文标题】:StrangediagonallinesinChrome/Chromium(bug?)【发布时间】:2017-06-1605:10:03【问题描述】:当我使用CSS过滤器、阴影、变换、SVG(或类似的)时,我的Chrome/Chromium显示一条奇怪的对角... 查看详情

Chromium 浏览器(Linux Chrome)无法显示 WebGL

】Chromium浏览器(LinuxChrome)无法显示WebGL【英文标题】:ChromiumBrowser(LinuxChrome)unabletodisplayWebGL【发布时间】:2013-10-0213:52:52【问题描述】:我正在运行Chrome(LinuxMint上的铬浏览器)。版本22.0.1229.94基于Ubuntu12.10构建,在LinuxMint14(1... 查看详情

chromium和chrome的区别

1、Chromium是谷歌的开源项目,开发者们可以共同去改进它,然后谷歌会收集改进后的Chromium并发布改进后安装包。Chrome不是开源项目,谷歌会把Chromium的东西更新到Chrome中。你也可以这么理解Chromium是体验版,Chrome是正式版;2、Ch... 查看详情

如何检测没有 chrome 的移动 safari?

】如何检测没有chrome的移动safari?【英文标题】:Howtodetectmobilesafariwithoutchrome?【发布时间】:2015-01-1321:49:06【问题描述】:我正在尝试了解如何检测用户何时在移动Safari中打开我的网站。Chrome和safari具有完全相同的参数:Chrome"M... 查看详情

如何调试最新chromium

...这样就可以直接选择从不同的解决方案启动调试了。  chromium是多进程架构,我们启动后只能调试主进程,其他的renderer进程和插件扩展进程是单独的,不能被直接调试。下面提供几种方法可以调试其他进程:  1.单进程模式... 查看详情

Windows 上的 HTML5 地理位置比 Linux(Firefox、Chrome、[Chromium])更准确

】Windows上的HTML5地理位置比Linux(Firefox、Chrome、[Chromium])更准确【英文标题】:HTML5geolocationmoreaccurateonWindowsthanLinux(Firefox,Chrome,[Chromium])【发布时间】:2012-12-1014:10:37【问题描述】:我一直在使用HTML5地理定位,并注意到我在Windo... 查看详情

如何调试最新chromium

...这样就可以直接选择从不同的解决方案启动调试了。  chromium是多进程架构,我们启动后只能调试主进程,其他的renderer进程和插件扩展进程是单独的,不能被直接调试。下面提供几种方法可以调试其他进程:  1.单进程模式... 查看详情

如何使量角器与木偶和chrome78一起使用?(代码片段)

...lysupportsChromeversion78错误。尽管已安装了puppeteer(1.20.0->Chromium78.0.3882.0)和webdriver-manager版本。关于如何解决此问题的任何想法?有关构建的更多信息,您可以查看CI日志here和项目here答案这已经有几个月了。他们的github仓库中... 查看详情