我需要一些函数返回一个布尔值来检查浏览器是否是Chrome。
我如何创建这样的功能?
更新:请参阅Jonathan's answer以获取更新方法来处理此问题。下面的答案可能仍然有效,但它可能会在其他浏览器中引发一些误报。
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
但是,如上所述,用户代理可能会被欺骗,因此在处理这些问题时最好使用功能检测(例如Modernizer),如其他答案所述。
适用于Mac上的Chrome浏览器。似乎比上述所有更简单或更可靠(如果是userAgent字符串测试)。
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
检查一下:How to detect Safari, Chrome, IE, Firefox and Opera browser?
在你的情况下:var isChrome = !! window.chrome &&(!! window.chrome.webstore || !! window.chrome.runtime);
了解不同桌面浏览器(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)
原始代码段不再适用于Chrome,我忘记了发现它的位置。它之前有过safari但我不再能够访问safari,因此我无法再进行验证。
只有Firefox和IE代码是原始代码段的一部分。
Opera,Edge和Chrome的检查很简单。它们在userAgent中存在差异。 OPR
仅存在于Opera中。 Edge
仅存在于Edge中。因此,要检查Chrome,这些字符串不应该存在。
至于Firefox和IE,我无法解释他们做了什么。
我将把这个功能添加到package i'm writing
所有答案都错了。 “Opera”和“Chrome”在所有情况下都是相同的。
(编辑部分)
这是正确的答案
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
要检查浏览器是否为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"
。还要感谢Ring和Adrien 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在OPR
有window.navigator.vendor
。感谢Frosty Z和Daniel Wallman举报此内容!
甚至更短:var is_chrome = /chrome/i.test( navigator.userAgent );
一个更简单的解决方案就是使用:
var isChrome = !!window.chrome;
!!
只是将对象转换为布尔值。在非Chrome浏览器中,此属性将为undefined
,这不是真正的。
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, ' '));
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
您可能还需要特定版本的Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
向大Lebowski道歉,在我的内心使用他的答案。
您可以使用:
navigator.userAgent.indexOf("Chrome") != -1
它正致力于第71节
用户可以更改用户代理。尝试在webkit
元素的style
对象中测试body
前缀属性
if ("webkitAppearance" in document.body.style) {
// do stuff
}