JavaScript:如何确定用户浏览器是否为Chrome?

问题描述 投票:191回答:13

我需要一些函数返回一个布尔值来检查浏览器是否是Chrome

我如何创建这样的功能?

javascript html google-chrome browser-detection
13个回答
190
投票

更新:请参阅Jonathan's answer以获取更新方法来处理此问题。下面的答案可能仍然有效,但它可能会在其他浏览器中引发一些误报。

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

但是,如上所述,用户代理可能会被欺骗,因此在处理这些问题时最好使用功能检测(例如Modernizer),如其他答案所述。


1
投票

适用于Mac上的Chrome浏览器。似乎比上述所有更简单或更可靠(如果是userAgent字符串测试)。

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

0
投票

检查一下:How to detect Safari, Chrome, IE, Firefox and Opera browser?

在你的情况下:var isChrome = !! window.chrome &&(!! window.chrome.webstore || !! window.chrome.runtime);


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和小提琴here

原始代码段不再适用于Chrome,我忘记了发现它的位置。它之前有过safari但我不再能够访问safari,因此我无法再进行验证。

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

Opera,Edge和Chrome的检查很简单。它们在userAgent中存在差异。 OPR仅存在于Opera中。 Edge仅存在于Edge中。因此,要检查Chrome,这些字符串不应该存在。

至于Firefox和IE,我无法解释他们做了什么。

我将把这个功能添加到package i'm writing


-4
投票

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

(编辑部分)

这是正确的答案

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

289
投票

要检查浏览器是否为Google Chrome,请尝试以下操作:

// please note, 
// that IE11 now returns undefined again for window.chrome
// and new Opera 30 outputs true for window.chrome
// but needs to check if window.opr is not undefined
// and new IE Edge outputs to true now for window.chrome
// and if not iOS Chrome check
// so use the below updated condition
var isChromium = window.chrome;
var winNav = window.navigator;
var vendorName = winNav.vendor;
var isOpera = typeof window.opr !== "undefined";
var isIEedge = winNav.userAgent.indexOf("Edge") > -1;
var isIOSChrome = winNav.userAgent.match("CriOS");

if (isIOSChrome) {
   // is Google Chrome on IOS
} else if(
  isChromium !== null &&
  typeof isChromium !== "undefined" &&
  vendorName === "Google Inc." &&
  isOpera === false &&
  isIEedge === false
) {
   // is Google Chrome
} else { 
   // not Google Chrome 
}

使用示例:http://codepen.io/jonathan/pen/WpQELR

这样做的原因是因为如果您使用Google Chrome检查器并转到控制台选项卡。输入“窗口”,然后按Enter键。然后,您就可以查看“窗口对象”的DOM属性。折叠对象时,您可以查看所有属性,包括“chrome”属性。

您不能再使用严格等于true来检查IE中的window.chrome。 IE用于返回undefined,现在它返回true。但是猜猜看,IE11现在再次返回undefined。 IE11还为""返回一个空字符串window.navigator.vendor

我希望这有帮助!

更新:

感谢Halcyon991在下面指出,新的Opera 18+也为window.chrome输出为true。看起来Opera 18是基于Chromium 31.所以我添加了一个检查以确保window.navigator.vendor是:"Google Inc"而不是"Opera Software ASA"。还要感谢RingAdrien Be关于Chrome 33不再回归的问题...... window.chrome现在检查是否为空。但是密切注意IE11,我添加了undefined的检查,因为IE11现在输出undefined,就像它在第一次发布时那样。然后经过一些更新构建后输出到true ..现在最近的更新版本再次输出undefined。微软无法弥补它的想法!

更新2015年7月24日 - Opera检查的补充

Opera 30刚刚发布。它不再输出window.opera。并且window.chrome在新的Opera 30中输出为true。因此,您必须检查OPR是否在userAgent中。我更新了上面的条件,以解释Opera 30中的这一新变化,因为它使用与Google Chrome相同的渲染引擎。

更新2015年10月13日 - IE检查的补充

添加了对IE Edge的检查,因为它为true输出window.chrome ..即使IE11为undefined输出window.chrome。感谢artfulhacker让我们知道这个!

更新2016年2月5日 - iOS Chrome检查添加

添加了对iOS Chrome检查CriOS的检查,因为它在iOS上为Chrome输出了true。感谢xinthose让我们知道这个!

更新4/18/2018 - 更改Opera检查

编辑检查Opera,检查window.opr不是undefined,因为现在Chrome 66在OPRwindow.navigator.vendor。感谢Frosty ZDaniel Wallman举报此内容!


22
投票

甚至更短:var is_chrome = /chrome/i.test( navigator.userAgent );


13
投票

一个更简单的解决方案就是使用:

var isChrome = !!window.chrome;

!!只是将对象转换为布尔值。在非Chrome浏览器中,此属性将为undefined,这不是真正的。


13
投票

console.log(JSON.stringify({
  isAndroid: /Android/.test(navigator.userAgent),
  isCordova: !!window.cordova,
  isEdge: /Edge/.test(navigator.userAgent),
  isFirefox: /Firefox/.test(navigator.userAgent),
  isChrome: /Google Inc/.test(navigator.vendor),
  isChromeIOS: /CriOS/.test(navigator.userAgent),
  isChromiumBased: !!window.chrome && !/Edge/.test(navigator.userAgent),
  isIE: /Trident/.test(navigator.userAgent),
  isIOS: /(iPhone|iPad|iPod)/.test(navigator.platform),
  isOpera: /OPR/.test(navigator.userAgent),
  isSafari: /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent),
  isTouchScreen: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
  isWebComponentsSupported: 'registerElement' in document && 'import' in document.createElement('link') && 'content' in document.createElement('template')
}, null, '  '));

8
投票
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );

2
投票

您可能还需要特定版本的Chrome:

var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
    var uaArray = ua.split(' ')
    ,   version = uaArray[uaArray.length - 2].substr(7);
}

向大Lebowski道歉,在我的内心使用他的答案。


2
投票

您可以使用:

navigator.userAgent.indexOf("Chrome") != -1

它正致力于第71节


1
投票

用户可以更改用户代理。尝试在webkit元素的style对象中测试body前缀属性

if ("webkitAppearance" in document.body.style) {
  // do stuff
}
© www.soinside.com 2019 - 2024. All rights reserved.