Sembra che jQuery.browser sia in grado di identificare facilmente il webkit a partire da 1.4. Ma come posso usarlo per distinguere Chrome da Safari (e viceversa)?Distinguere Chrome da Safari utilizzando jQuery.browser
risposta
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;
}
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;
}
uhm - $ .browser.chrome non è definito. e $ .browser.safari è vero sia per chrome che per safari –
@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
@sAc, inoltre, la variabile' version' non è necessaria e dovrebbe essere sostituita con '$ .browser.version'. – kingjeffrey
/Chrome/.test(navigator.userAgent)
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;
La prima soluzione è molto elegante. – NullVoxPopuli
Perché !! per chrome cosa significa? – Carlos
'$ .browser.webkit &&! Window.chrome' risulta vero in Firefox ... –
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
anche per gli utenti non-JQuery:
navigator.userAgent.indexOf('WebKit') + 1 ?
((navigator.vendor || '').indexOf('Apple') + 1 ? /* Safari */ : /* Chrome */)
: /* not Webkit */
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. –
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;
},
Per safari, $ .browser.version finisce per darti la versione di webkit, non la versione di safari. Prova invece userAgent.indexOf ('Versione /') + 8. – David
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
@David, dovresti fare il 'v' minuscolo nella stringa' 'Version/'', come prima nel codice la stringa dell'agent user era in minuscolo. – mkmurray