2010-07-21 11 views

Odpowiedz

38

Od Sarfraz nie poprawiła swoją odpowiedź (dziękuję Sarfraz dla wskazujące mnie we właściwym kierunku), będę po funkcjonujący kod tutaj .

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

Dla safari, $ .browser.version kończy się dając wersję webkita, a nie wersję safari. Wypróbuj userAgent.indexOf ("Version/') + 8 zamiast tego. – David

+0

Możesz również podciągana do znaku spacji zamiast kropki w liniach, które mówią: 'userAgent = userAgent.substring (0, userAgent.indexOf ('.'));' W celu uzyskania pełnych numerów wersji zamiast tylko pierwszych część numeru wersji (numer główny). – mkmurray

+3

@David, musisz wprowadzić małe 'v' w swoim ciągu' 'Version /' ', jak wcześniej w kodzie, w którym ciąg agenta użytkownika był pisany małymi literami. – mkmurray

2

Można zrobić tak:

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

uhm - $ .browser.chrome jest niezdefiniowany. i $ .browser.safari jest prawdziwe zarówno dla chrome, jak i Safari –

+0

@sAc, byłeś blisko, powinien pojawić się przed podanym kodem: 'var userAgent = navigator.userAgent.toLowerCase(); $ .browser.chrome = /chrome/.test (navigator.userAgent.toLowerCase()); var version = 0; ' – kingjeffrey

+0

@sAc, również zmienna' version' jest niepotrzebna i powinna zostać zamieniona na '$ .browser.version'. – kingjeffrey

2
/Chrome/.test(navigator.userAgent) 
36

bez 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); 
} 

z jQuery

(W nie będzie działać z jQuery 1,9 i powyżej, w jQuery.browser została usunięta z jQuery. Patrz http://api.jquery.com/jQuery.browser/)

$.browser.chrome = $.browser.webkit && !!window.chrome; 
$.browser.safari = $.browser.webkit && !window.chrome; 
+1

pierwsze rozwiązanie jest bardzo eleganckie. – NullVoxPopuli

+0

Dlaczego !! dla chromu, co to znaczy? – Carlos

+0

'$ .browser.webkit &&! Window.chrome' wyniki prawdziwe w Firefox ... –

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

Łata dodaje $ .browser.chrome a także wykluczyć wykrywanie goolge Chrome od $ .browser.safari

2

także dla użytkowników innych niż JQuery:

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

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

+0

To mi się udało. To trochę sztuczka do przeczytania, jeśli nie jesteś przyzwyczajony do tego rodzaju warunkowego oświadczenia, ale dobrze to ułożyłeś. Dzięki za tonę. –

0

Możesz też spróbować zastosować to podejście, pracuje dla mnie.

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

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

      return isSafari; 
    }, 
Powiązane problemy