我需要一些返回布尔值的函数来检查浏览器是否为Chrome。
如何创建此类功能?
我需要一些返回布尔值的函数来检查浏览器是否为Chrome。
如何创建此类功能?
Answers:
更新:请参阅乔纳森的答案以获取更新的方式来处理此问题。以下答案可能仍然有效,但是可能会在其他浏览器中引发误报。
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
但是,正如提到的那样,用户代理可以被欺骗,因此在处理这些问题时总是最好使用功能检测(例如Modernizer),如其他答案所述。
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
到navigator.vendor
,所以这种方法是不是防弹的,像/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
可能会更好地工作
要检查浏览器是否为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等于true来检查IE中的window.chrome
。IE曾经返回undefined
,现在返回true
。但是猜猜是什么,IE11现在再次返回undefined。IE11还返回一个空字符串""
的window.navigator.vendor
。
我希望这有帮助!
更新:
感谢Halcyon991在下面指出,新的Opera 18+也会将true输出为true window.chrome
。看起来Opera 18是基于Chromium 31的。因此,我添加了一个检查以确保window.navigator.vendor
is是,"Google Inc"
而不是is "Opera Software ASA"
。同时还要感谢Ring和Adrien Be提醒,Chrome 33不再返回true ... window.chrome
现在检查是否不为null。但是请密切注意IE11,undefined
因为IE11现在已经输出了undefined
,所以我增加了检查,就像第一次发布时一样。然后经过一些更新版本将其输出到true
..现在undefined
再次输出最近的更新版本。微软无法下定决心!
更新 2015-添加Opera检查
Opera 30刚刚发布。它不再输出window.opera
。并且window.chrome
在新的Opera 30中也输出为true。因此,您必须检查OPR是否在userAgent中。我更新了上面的条件,以说明Opera 30中的这一新更改,因为它使用的渲染引擎与Google Chrome浏览器相同。
更新10/13/ 2015-IE检查的补充
增加了检查IE边缘,由于其输出true
为window.chrome
..即使IE11输出undefined
的window.chrome
。感谢artfulhacker让我们知道这一点!
更新2/5/ 2016-iOS Chrome检查的补充
添加了针对iOS的Chrome浏览器检查支票,CriOS
因为该支票输出true
为iOS上的Chrome浏览器。感谢xinthose让我们知道这一点!
更新4/ 18/2018-Opera检查更改
编辑检查歌剧,检查window.opr
是不是undefined
因为现在的Chrome 66 OPR
在window.navigator.vendor
。感谢Frosty Z和Daniel Wallman的报道!
Mozilla/5.0 (Linux; Android 8.0.0; ASUS_Z012D Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36
因此isChrome()
返回false。
window.opr
不会检查undefined
。
一个更简单的解决方案就是使用:
var isChrome = !!window.chrome;
在!!
刚刚转换的对象为布尔值。在非Chrome浏览器中,此属性为undefined
,这是不正确的。
请注意,对于基于Chrome的Edge版本,这也会返回true(感谢@Carrm指出这一点)。
true
到window.chrome
。请查看有防弹检测和修复功能的conditionizr.com。
!!
将值转换为true
或false
。typeof(window.chrome)
给"object"
,而typeof(!!window.chrome)
给"boolean"
。您的代码示例也可以工作,因为该if
语句可以进行转换。
true
Edge。
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() );
true
在Microsoft Edge中返回。
在Mac上的Chrome上对我有效。似乎比以上所有或更简单或更可靠(如果测试了userAgent字符串)。
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
用户可以更改用户代理。尝试测试元素对象中的webkit
前缀属性style
body
if ("webkitAppearance" in document.body.style) {
// do stuff
}
检查此:如何检测Safari,Chrome,IE,Firefox和Opera浏览器?
在您的情况下: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,我忘记了在哪里找到它。它以前有野生动物园,但我再也无法使用野生动物园了,所以我无法验证了。
只有Firefox和IE代码是原始代码段的一部分。
对Opera,Edge和Chrome的检查非常简单。它们在userAgent中具有差异。OPR
仅存在于Opera中。Edge
仅存在于Edge中。因此,要检查Chrome是否应使用这些字符串。
至于Firefox和IE,我无法解释它们的作用。
所有答案都是错误的。在所有情况下,“ Opera”和“ Chrome”都是相同的。
(编辑部分)
这是正确的答案
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
现在undefined