it-swarm.com.ru

Как определить, является ли браузер Chrome с помощью jQuery?

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

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

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

if ($.browser.webkit) {

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

if ($.browser.chrome) {

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

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

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

}

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

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

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

106
Haim Evgi
if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())){
 alert('I am chrome');
}
44
adedoy

Этот вопрос уже обсуждался здесь: 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 более прост!

10
Jonathan Marzullo

Пользователь Endless прав, 

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

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

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

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

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

9
Master

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

$.browser.chrome = (typeof window.chrome === "object");
6
Endless
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
5
thinkdevcode

К сожалению, из-за последнего обновления 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
Halcyon991

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

"chrome" in window

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

1
Florrie

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

1
stefgosselin

Когда я проверяю ответ @IE, я всегда получаю «правду». Лучший способ это то, что работает также @IE:

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

Как описано в этом ответе: https://stackoverflow.com/a/4565120/1201725

0
Bahadir Tasdemir
if(navigator.vendor.indexOf('Goog') > -1){
  //Your code here
}
0
Rafael Soteras