如何使用jQuery检测浏览器是否为Chrome?

57

我在Chrome中运行一个函数时遇到了问题,但在Safari中,两个都是基于Webkit的浏览器。

我需要为Chrome自定义函数中的变量,但不需要为Safari自定义。

很可惜,我一直在使用以下代码来检测是否为基于Webkit的浏览器:

if ($.browser.webkit) {

但我需要检测:

if ($.browser.chrome) {

有没有办法编写类似的语句(与上面的语句工作方式相同)?


2
也许你可以发布这个有问题的函数,看看我们能否帮助你在Chrome中使其正常工作? - Todd
这个函数相当长,我知道如何修复它,我只需要能够为Chrome进行自定义。 - TaylorMac
3
区分Chrome与Safari浏览器的方法(使用jQuery浏览器对象):if ($.browser.chrome) { // 这是Chrome浏览器 } else if ($.browser.safari) { // 这是Safari浏览器 }注意:从JQuery版本1.9开始,$.browser已不再支持。您可以使用Modernizr或检测用户代理字符串来实现同样的功能。 - Haim Evgi
虽然那是个好主意,但我感觉自己已经通过足够的工作知道问题出在哪里了。 - TaylorMac
1
Haim,谢谢。你能把这个发成答案吗,这样我就可以接受它了? - TaylorMac
11个回答

107
$.browser.chrome = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase()); 

if($.browser.chrome){
  ............

}

更新:(感谢@Mr. Bacciagalupe的10倍)

jQuery自1.9版及其最新版本中已删除$.browser

但是你仍然可以使用$.browser作为独立插件,可以在这里找到。


3
Chromium在其用户代理中也包括“Chrome”,但为什么不使用“/chrom(e|ium)/”以确保安全呢 :) - Naftuli Kay
2
在IE8上失败,因为它列出了chromeframe: mozilla/4.0(兼容;msie 8.0;windows nt 5.1;trident/4.0;chromeframe/25.0.1364.97;.net clr 1.1.4322;.net clr 2.0.50727;infopath.1;ms-rtc lm 8;.net4.0c;.net4.0e;.net clr 3.0.4506.2152;.net clr 3.5.30729) - azsl1326
@PAPAFRESH,不幸的是有时候没有可用的功能来区分兼容性。例如,当偏移父元素有边框时,由于浏览器差异而使用position(),我刚刚不得不使用这个。 - Jacob
3
@Jacob,jQuery在1.9及其最新版本中已经移除了$.browser。但是你仍然可以使用$.browser作为一个独立的插件,可以在这里找到:https://github.com/gabceb/jquery-browser-plugin - Jonathan Marzullo
jQuery.browser现在已经被弃用了。我们现在有替代方案吗? - 123
显示剩余2条评论

46
if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())){
 alert('I am chrome');
}

1
此问题在IE Edge中被检测到。 - klewis

12

这个问题已经在这里讨论过:JavaScript:如何找出用户浏览器是否为Chrome?

请尝试这个:

var isChromium = window.chrome;
if(isChromium){
    // is Google chrome 
} else {
    // not Google chrome 
}

但更全面和准确的答案是,自IE11、IE Edge和Opera以来,它们也会返回truewindow.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 
}

以上帖子建议使用jQuery.browser。但是jQuery API建议不要使用此方法(请参见API文档)。并且在未来的jQuery版本中,它的功能可能被移动到一个团队支持的插件中。
jQuery API建议使用jQuery.support
原因是'jQuery.browser'使用可以伪造的用户代理,并且在后续版本的jQuery中已弃用。如果您真的想使用$.browser。这是独立的jQuery插件链接,因为它已经从jQuery 1.9.1版本中删除了。 https://github.com/gabceb/jquery-browser-plugin 最好使用功能对象检测而不是浏览器检测。
另外,如果您使用Google Chrome检查器并转到控制台选项卡,请输入'window'并按Enter。然后您将能够查看“窗口对象”的DOM属性。当您折叠该对象时,可以查看所有属性,包括'chrome'属性。

我希望这可以帮到你,尽管问题是关于如何使用jQuery,但有时候直接使用JavaScript更简单!


9

Endless用户是正确的,

$.browser.chrome = (typeof window.chrome === "object"); 

使用jQuery代码检测Chrome浏览器是最好的方法。

如果您在使用IE浏览器,并添加了GoogleFrame插件,那么

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

由于GoogleFrame插件修改了navigator属性并在其中添加了chromeframe,因此该代码将被视为Chrome浏览器。


5
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );

5

userAgent可以被更改。为了更加健壮,使用由Chrome指定的全局变量。

$.browser.chrome = (typeof window.chrome === "object");

2
if(navigator.vendor.indexOf('Goog') > -1){
  //Your code here
}

1
作为一个快速的补充,我很惊讶没有人想到可以使用in运算符:
"chrome" in window

显然这不是使用JQuery,但我认为它很方便,因为有时你不使用任何外部库。

1

虽然它不是Jquery,但我自己使用Jquery,但为了浏览器检测,我已经多次使用this page上的脚本。它可以检测所有主要浏览器,还有其他一些。工作几乎全部完成。


1
当我在@IE上测试答案时,总是得到“true”。更好的方法是这个,它也适用于@IE:
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

如此答案所述: https://dev59.com/K2455IYBdhLWcg3wD_wB#4565120


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