Как определить, является ли браузер Chrome с помощью jQuery? - PullRequest
56 голосов
/ 14 июня 2011

У меня есть небольшая проблема с функцией, работающей в Chrome, которая работает правильно в Safari, в обоих браузерах webkit ...

Мне нужно настроить переменную в функции для Chrome, но не для Safari.

К сожалению, я использовал это, чтобы определить, является ли это браузер webkit:

if ($.browser.webkit) {

Но мне нужно обнаружить:

if ($.browser.chrome) {

Есть лиспособ написать подобное утверждение (рабочая версия вышеупомянутого)?

Ответы [ 11 ]

106 голосов
/ 14 июня 2011
$.browser.chrome = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase()); 

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

}

ОБНОВЛЕНИЕ: (от 10x до @Mr. Bacciagalupe)

jQuery удалил $.browser из 1.9 и их последнюю версию.

Но вы все равно можете использовать $ .browser в качестве отдельного плагина, который можно найти здесь

46 голосов
/ 17 июля 2012
if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())){
 alert('I am chrome');
}
11 голосов
/ 20 октября 2012

Этот вопрос уже обсуждался здесь: JavaScript: Как узнать, является ли браузер пользователя Chrome?

Пожалуйста, попробуйте это:

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

Но более полный и точный ответ был бы следующим: IE11, IE Edge и Opera также вернут true для window.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. Но API jQuery не рекомендует использовать этот метод .. (см. DOCS в API ). И заявляет, что его функциональность может быть перенесена в поддерживаемый командой плагин в будущем выпуске jQuery.

API jQuery рекомендует использовать jQuery.support.

Причина в том, что jQuery.browser использует пользовательский агент, который может быть подделан, и в более поздних версиях jQuery он фактически устарел. Если вы действительно хотите использовать $ .browser .. Вот ссылка на автономный плагин jQuery, так как он был удален из jQuery версии 1.9.1. https://github.com/gabceb/jquery-browser-plugin

Лучше использовать обнаружение объектного объекта вместо обнаружения в браузере.

Также, если вы используете инспектор Google Chrome и переходите на вкладку консоли. Введите «окно» и нажмите Enter. Затем вы сможете просмотреть свойства DOM для «объекта окна». Когда вы свернете объект, вы сможете просмотреть все свойства, включая свойство 'chrome'.

Надеюсь, это поможет, хотя вопрос был в том, как это сделать с jQuery. Но иногда прямой JavaScript более прост!

9 голосов
/ 16 октября 2012

Пользователь Бесконечный прав,

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

лучше всего подходит для обнаружения браузера Chrome с помощью jQuery.

Если вы используете IE и добавили GoogleFrame в качестве плагина,

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

код будет восприниматься как браузер Chrome, потому что плагин GoogleFrame изменяет свойство навигатора и добавляет внутри него chromeframe.

5 голосов
/ 08 июля 2012

userAgent может быть изменен.для большей надежности используйте глобальную переменную, указанную в chrome

$.browser.chrome = (typeof window.chrome === "object");
5 голосов
/ 14 июня 2011
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
1 голос
/ 01 марта 2019
if(navigator.vendor.indexOf('Goog') > -1){
  //Your code here
}
1 голос
/ 08 июня 2015

Как быстрое дополнение, и я удивлен, что никто не подумал об этом, вы можете использовать оператор in:

"chrome" in window

Очевидно, что это не использует JQuery, но я решил, что 'Я бы сказал, что это удобно для тех случаев, когда вы не используете внешние библиотеки.

1 голос
/ 04 декабря 2013

К сожалению, из-за последнего обновления Opera !!window.chrome (и других тестов на объекте окна), когда тестирование в Opera возвращает true.

Conditionizr позаботится об этом за вас и решит проблему Opera:

conditionizr.add('chrome', [], function () {
    return !!window.chrome && !/opera|opr/i.test(navigator.userAgent);
});

Я бы настоятельно рекомендовал использовать его, поскольку ни один из вышеперечисленных в настоящее время не действует.

Это позволяет вам:

if (conditionizr.chrome) {...}

Conditionizr заботится о других обнаружениях браузера и работает намного быстрее и надежнее, чем взломы jQuery.

1 голос
/ 14 июня 2011

Хотя это не Jquery, я сам использую jquery, но для обнаружения в браузере я несколько раз использовал скрипт на этой странице . Он обнаруживает все основные браузеры, , а затем некоторые . Работа в основном сделана для вас.

...