Отличить Chrome от Safari с помощью jQuery.browser

Кажется, что jQuery.browser может довольно легко идентифицировать webkit начиная с версии 1.4. Но как я могу использовать его, чтобы отличить Chrome от Safari (и наоборот)?


person kingjeffrey    schedule 21.07.2010    source источник


Ответы (6)


Поскольку Sarfraz не исправил свой ответ (спасибо Sarfraz за то, что указали мне правильное направление), я опубликую здесь работающий код.

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

// Is this a version of Chrome?
if($.browser.chrome){
  userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  $.browser.version = userAgent;
  // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
  $.browser.safari = false;
}

// Is this a version of Safari?
if($.browser.safari){
  userAgent = userAgent.substring(userAgent.indexOf('version/') +8);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  $.browser.version = userAgent;
}
person kingjeffrey    schedule 29.07.2010
comment
Для сафари $.browser.version дает вам версию webkit, а не версию сафари. Вместо этого попробуйте userAgent.indexOf('Version/') + 8. - person David; 25.08.2011
comment
Кроме того, вы можете подстроку до символа пробела вместо точки в строках, которые говорят userAgent = userAgent.substring(0,userAgent.indexOf('.'));, чтобы получить полные номера версий, а не только первую часть номера версии (основной номер). - person mkmurray; 29.02.2012
comment
@David, вам нужно будет использовать строчные буквы v в строке 'Version/', так как ранее в коде строка пользовательского агента была строчной. - person mkmurray; 29.02.2012

Без jQuery

isChrome = function() { 
  return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
}
isSafari = function() {
  return /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
}

С jQuery

(Следующее не будет работать с jQuery 1.9 и выше, поскольку jQuery.browser было удалено из jQuery. См. http://api.jquery.com/jQuery.browser/)

$.browser.chrome = $.browser.webkit && !!window.chrome;
$.browser.safari = $.browser.webkit && !window.chrome;
person Vikrant Chaudhary    schedule 08.08.2011
comment
первое решение очень элегантно. - person NullVoxPopuli; 29.02.2012
comment
Почему !! для хрома что это значит? - person Carlos; 31.08.2012
comment
Очень жаль, что $.browser удалили. Но как мы это обнаружим с 1.10? Я ничего не видел в документах API. - person AGamePlayer; 04.12.2013

Вы можете сделать так:

// Is this a version of Chrome?
if($.browser.chrome){
  userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  version = userAgent;
  // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
  $.browser.safari = false;
}

// Is this a version of Safari?

if($.browser.safari){
  userAgent = userAgent.substring(userAgent.indexOf('safari/') +7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  version = userAgent;
}

http://api.jquery.com/jQuery.browser/

person Sarfraz    schedule 21.07.2010
comment
гм -- $.browser.chrome не определен. и $.browser.safari верно как для хрома, так и для сафари - person Scott Evernden; 22.07.2010
comment
@sAc, вы были близки, это должно появиться перед предоставленным вами кодом: var userAgent = navigator.userAgent.toLowerCase(); $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); var version = 0; - person kingjeffrey; 22.07.2010
comment
@sAc, кроме того, переменная version не нужна и ее следует заменить на $.browser.version. - person kingjeffrey; 23.07.2010
comment
@sAc, я хотел бы принять ваш ответ, так как он поставил меня на правильный путь, но я не могу этого сделать, пока он содержит неработоспособный код. Пожалуйста, отредактируйте свой ответ, чтобы исправить ошибки, упомянутые выше. - person kingjeffrey; 23.07.2010
comment
@kingjeffrey: я разместил код из документов jquery, ссылка на который размещена в моем ответе, он не был написан мной. И любые исправления уже упомянуты в этих комментариях :) - person Sarfraz; 23.07.2010
comment
@sAc, вы вставили часть кода, которая потеряла важный контекст. Хотя это указало мне правильное направление, эта потеря контекста калечит предоставленный код. Я бы сам отредактировал, но моя репутация не позволяет. - person kingjeffrey; 24.07.2010

Также для пользователей, не использующих JQuery:

    navigator.userAgent.indexOf('WebKit') + 1 ? 
       ((navigator.vendor || '').indexOf('Apple') + 1 ? /* Safari */ : /* Chrome */)
    : /* not Webkit */

http://jsfiddle.net/HtWag/13/

person Hugo Stieglitz    schedule 24.04.2012
comment
Это помогло мне. Если вы не привыкли к такого рода условным операторам, вам будет сложно это прочитать, но вы довольно хорошо все изложили. Благодаря тонну. - person Scott M; 24.07.2012

Вы также можете попробовать использовать этот подход, он работает для меня.

    isSafari: function () 
    {
            var isSafari = (navigator.userAgent.indexOf('Safari') != -1
                        && navigator.userAgent.indexOf('Chrome') == -1)

            console.log('IsSafari : ' + isSafari);

            return isSafari;
    },
person Sivalingaamorthy    schedule 12.02.2015

window.chrome?$.browser.chrome=!0:($.browser.webkit&&($.browser.safari=!0),$.browser.chrome=!1);

Этот патч добавляет $.browser.chrome, а также исключает обнаружение Google Chrome из $.browser.safari.

person J_z    schedule 26.03.2012