JavaScript:如何判断用户的浏览器是否为Chrome?

273
我需要一些返回布尔值的函数,用于检查浏览器是否为Chrome。如何创建此功能?

17
你确定你不想做特征检测吗?(即询问“这个能做我需要的吗?”而不是“这是Chrome吗?”) - bdukes
51
谁知道呢?他可能想让用户下载一个谷歌浏览器扩展。 - naveen
2
这个问题突显了用户代理检测的难题。仅仅三年后,Fun 3D Box Background 就在我那款低端手机上能(试图)在 Chrome 中加载了,但是在我那台高端台式电脑上的 Firefox 却不会尝试加载。 - Álvaro González
5
我同意特性检测是正确的方法。但有些情况下你需要检测特定的内容,比如我想只在 Chrome 中进行 monkey patching xhr.sendAsBinary。我的初始解决方案是检查 filereader.readasbinary 是否被实现。然而,我遇到了问题,它也会在某些移动浏览器中进行 patching,导致上传失败。我只想让这个修复针对 Chrome。 - frostymarvelous
4
想知道为什么了解浏览器是否是Chrome很重要吗? Chrome不能加载RSS订阅,你知道吗?所以你可以提供警告或重定向用户,而不是链接到一个在Chrome中无法加载的RSS订阅。 这都怪你,Google Chrome... - Pic Mickael
显示剩余9条评论
19个回答

1

在我的Mac上的Chrome里运行良好。似乎比上述所有方法更简单或更可靠(在测试userAgent字符串的情况下)。

        var isChrome = false;
        if (window.chrome && !window.opr){
            isChrome = true;
        }
        console.log(isChrome);

3
const isChrome = window.chrome && !window.opr; - ifbamoq
1
我猜,那个答案被单行代码爱好者们踩了。尽管我理解你们的热情,但我认为你们不应该只因此就踩一个完全正确的答案。 - yurin

1

检查浏览器是否为Google Chrome:

var isChrome = navigator.userAgent.includes("Chrome") && navigator.vendor.includes("Google Inc");

console.log(navigator.vendor);
// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36 "

console.log(navigator.userAgent); 
// "Google Inc."

1
这在Opera上显示为“true”。 - Gagik

0
用户可以更改用户代理。尝试在body元素的style对象中测试webkit前缀属性。
if ("webkitAppearance" in document.body.style) {
  // do stuff
}

1
在 Firefox 中:(“webkitAnimation” in document.body.style)=== true - Tomás
4
FYI:'webkitAppearance'也不再适用。 Edge现在正在使用它。最好删除你的答案。^^ - hexalys

0

现在你可以使用navigator.userAgent.includes("Chrome")


0
我找到的最佳解决方案,在大多数浏览器中都会返回true或false:
var isChrome = (navigator.userAgent.indexOf("Chrome") != -1 && navigator.vendor.indexOf("Google Inc") != -1)

使用.indexOf而不是.includes可以使其更兼容浏览器。 尽管(或因为)整个重点是使您的代码特定于浏览器,但您需要使条件在大多数(或所有)浏览器中工作。


几年前的一个现有答案相同的解决方案。正如那个答案所指出的那样,对于Edge Chromium返回true。 - Heretic Monkey

0

了解不同桌面浏览器的名称(Firefox,IE,Opera,Edge,Chrome)。除了Safari。

function getBrowserName() {
  var browserName = '';
  var userAgent = navigator.userAgent;
  (typeof InstallTrigger !== 'undefined') && (browserName = 'Firefox');
  ( /* @cc_on!@*/ false || !!document.documentMode) && (browserName = 'IE');
  (!!window.chrome && userAgent.match(/OPR/)) && (browserName = 'Opera');
  (!!window.chrome && userAgent.match(/Edge/)) && (browserName = 'Edge');
  (!!window.chrome && !userAgent.match(/(OPR|Edge)/)) && (browserName = 'Chrome');

  /**
   * Expected returns
   * Firefox, Opera, Edge, Chrome
   */
  return browserName;
}

支持以下浏览器版本:

Opera - 58.0.3135.79
Firefox - 65.0.2 (64-bit)
IE - 11.413.15063 (JS Fiddle no longer supports IE just paste in Console)
Edge - 44.17763.1.0
Chrome - 72.0.3626.121 (Official Build) (64-bit)

在此处查看代码片段 here 和 fiddle here

原始代码片段不再适用于Chrome,我忘记了它的来源。它以前是适用于Safari的,但我不再拥有Safari,因此无法进行验证。

只有Firefox和IE代码是原始片段的一部分。

检查Opera、Edge和Chrome很简单。它们在userAgent中有所不同。 OPR 只存在于Opera中。 Edge 只存在于Edge中。因此,要检查Chrome,这些字符串不应该出现。

至于Firefox和IE,我无法解释它们的作用。

我将把这个功能添加到我正在编写的 中。


-1

1
在Chrome for Android上无法工作,无论是在浏览器中还是作为PWA。检查开发控制台显示window.chrome为{loadTimes: ƒ, csi: ƒ} - Simon B.

-2
var is_chrome = browseris.chrome

或检查其他浏览器:

browseris.firefox
browseris.ie
browseris.safari

同时你也可以检查版本,例如browseris.chrome7up等。

检查'browseris'对象中的所有现有信息。


-4

所有答案都是错误的。在所有情况下,“Opera”和“Chrome”是相同的。

(编辑部分)

这里是正确的答案。

if (window.chrome && window.chrome.webstore) {
    // this is Chrome
}

1
比起回答,更好的是留下评论。 - Jace Cotton
如果你想知道为什么你被降级了,那么这只是不正确的。例如,它们以不同的方式处理键盘快捷键和访问键修饰符(这些也无法进行特征检测)。 - Zilk
你编辑后的“正确答案”是不正确的;在Firefox和其他浏览器中会抛出ReferenceError。请使用typeof chromewindow.chrome中的任意一个。 - Zilk
你是对的,可以只使用 window.chrome。 - Ararat Harutyunyan
10
从 Chrome 71 开始,这将不再起作用。window.chrome.webstore 现在是 undefined - Esteban
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接