2010-07-21 9 views

risposta

38

Dal Sarfraz non ha corretto la sua risposta (grazie Sarfraz per avermi nella giusta direzione), mi post funzionante il codice qui .

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

Per safari, $ .browser.version finisce per darti la versione di webkit, non la versione di safari. Prova invece userAgent.indexOf ('Versione /') + 8. – David

+0

Inoltre, è possibile eseguire la sottostringa fino a un carattere di spazio anziché un punto sulle righe che dice 'userAgent = userAgent.substring (0, userAgent.indexOf ('.'));' Per ottenere i numeri di versione completi anziché solo il primo parte del numero di versione (il numero principale). – mkmurray

+3

@David, dovresti fare il 'v' minuscolo nella stringa' 'Version/'', come prima nel codice la stringa dell'agent user era in minuscolo. – mkmurray

2

Si può fare come:

// 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 non è definito. e $ .browser.safari è vero sia per chrome che per safari –

+0

@sAc, eri vicino, questo dovrebbe apparire prima del codice che hai fornito: 'var userAgent = navigator.userAgent.toLowerCase(); $ .browser.chrome = /chrome/.test (navigator.userAgent.toLowerCase()); var version = 0; ' – kingjeffrey

+0

@sAc, inoltre, la variabile' version' non è necessaria e dovrebbe essere sostituita con '$ .browser.version'. – kingjeffrey

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

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

Con jQuery

(A seguito non funziona con jQuery 1.9 e soprattutto come jQuery.browser è stata rimossa dal jQuery. Vedi http://api.jquery.com/jQuery.browser/)

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

La prima soluzione è molto elegante. – NullVoxPopuli

+0

Perché !! per chrome cosa significa? – Carlos

+0

'$ .browser.webkit &&! Window.chrome' risulta vero in Firefox ... –

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

Questa patch aggiunge $ .browser.chrome e anche escludere il rilevamento Goolge Chrome da $ .browser.safari

2

anche per gli utenti non-JQuery:

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

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

+0

Questo ha fatto il trucco per me. È un po 'un trucco da leggere se non si è abituati a questo tipo di affermazione condizionale, ma l'hai spiegato abbastanza bene. Grazie mille. –

0

Puoi provare a utilizzare anche questo approccio, per me va bene.

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

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

      return isSafari; 
    }, 
Problemi correlati