2010-07-21 3 views

ответ

38

С Сарфразами не исправил свой ответ (спасибо Сарфразы указала мне в правильном направлении), я буду размещать функционирующий код здесь ,

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; 
} 
+3

Для сафари $ .browser.version заканчивается тем, что дает вам версию webkit, а не версию сафари. Вместо этого попробуйте userAgent.indexOf ('Version /') + 8. – David

+0

Кроме того, вы можете подстроить до символа пробела вместо периода на строках, которые говорят 'userAgent = userAgent.substring (0, userAgent.indexOf ('.'));', Чтобы получить полные номера версий, а не только первые часть номера версии (основное число). – mkmurray

+3

@David, вам нужно сделать строчную букву 'v' в вашей строке' 'Version/'', как ранее в коде строка пользовательского агента была уменьшена. – mkmurray

2

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

// 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/

+0

Умм - $ .browser.chrome не определен. и $ .browser.safari верен как для хрома, так и для сафари. –

+0

@sAc, вы были близки, это должно появиться перед кодом, который вы указали: 'var userAgent = navigator.userAgent.toLowerCase(); $ .browser.chrome = /chrome/.test (navigator.userAgent.toLowerCase()); var version = 0; ' – kingjeffrey

+0

@sAc, также переменная' version' не нужна и должна быть заменена на '$ .browser.version'. – kingjeffrey

36

Без 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; 
+1

первое решение очень элегантно. – NullVoxPopuli

+0

Почему! для хром, что это значит? – Carlos

+0

'$ .browser.webkit &&! Window.chrome' results true в Firefox ... –

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

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

2

Также для не-JQuery пользователей:

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

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

+0

Это сделало трюк для меня. Это немного хитрость, чтобы прочитать, если вы не привыкли к этому условному утверждению, но вы неплохо выложили это. Благодаря тонну. –

0

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

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

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

      return isSafari; 
    }, 

 Смежные вопросы

  • Нет связанных вопросов^_^