2013-01-21 20 views
11

Eventuali duplicati:
What is the Best way to do Browser Detection in Javascript?modo affidabile per rilevare desktop vs Mobile Browser

mi piacerebbe essenzialmente procedere come segue (in JavaScript o PHP):

if (desktop browser) { 
    do x; 
} 
else { // mobile browser 
    do not do x; 
} 

È noto che l'utilizzo di un browser detection method is not recommended. Una soluzione migliore sta usando un capability testing. La mia domanda è, con i browser mobili diventare più intelligenti e potenti come la versione desktop, quale idealmente esclusivo rilevamento di funzionalità per filtrare il desktop da browser non desktop?

Penso che l'inversione del controllo condizionale, ovvero if (mobile browser) {} else ..., potrebbe rivelarsi più problematico, giusto?

+3

Sembra che manchi il punto di rilevamento delle funzioni. Il punto è rilevare le funzionalità che ti interessano e non se è mobile/desktop. – Quentin

+1

Grazie per averlo indicato, @Quentin. Spero che questo chiarisca gli altri che stanno cercando di fare lo stesso. – moey

+0

Correlati: http://stackoverflow.com/q/11381673 – moey

risposta

13

Quello che una piccola ricerca su Google alzato, da A Beautiful Site:

var isMobile = { 
    Android: function() { 
     return navigator.userAgent.match(/Android/i); 
    }, 
    BlackBerry: function() { 
     return navigator.userAgent.match(/BlackBerry/i); 
    }, 
    iOS: function() { 
     return navigator.userAgent.match(/iPhone|iPad|iPod/i); 
    }, 
    Opera: function() { 
     return navigator.userAgent.match(/Opera Mini/i); 
    }, 
    Windows: function() { 
     return navigator.userAgent.match(/IEMobile/i); 
    }, 
    any: function() { 
     return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); 
    } 
}; 

if(isMobile.any()){ 
    // Mobile! 
} else { 
    // Not mobile 
} 

Non voglio sostenere che il rilevamento caratteristica è modo preferibile user-agent sniffing, che è terribile realtà. Ma se stai rilevando la funzionalità per determinare se il dispositivo è considerato mobile o meno, ti stai esponendo a una serie di problemi completamente nuova.

Non è possibile controllare pixel-ratio perché i nuovi computer desktop saranno molto probabilmente "retina" o super-HD. Non è possibile controllare device-orientation perché non è più qualcosa di unico per i cellulari. Non è possibile controllare (se possibile) il giroscopio perché alcuni laptop potrebbero restituire valori.

Costruisci siti Web che funzionano su tutte le piattaforme senza cercare di separarli!

+0

Stavo per aggiungere un commento per controllare 'window.orientation', ma a quanto pare ha sottolineato che non è più esclusivo per i dispositivi mobili. È principalmente a causa di Windows 8? – moey

+0

Principalmente, sì. Ma il punto è che potremmo (e quasi sicuramente lo faranno) un mercato allagato da dispositivi orientati all'orientamento molto presto. Rilevare * mobile * è inutile e dovrebbe essere considerato una cattiva pratica. –

+1

Ci sono diverse implementazioni per il concetto presentato qui da @Remi: per valutare 'navigator.userAgent'. Mi piace ricordare che il controllo di qualcosa che è usato per essere specifico del cellulare, ad es. l'orientamento del dispositivo potrebbe non essere più valido/efficace, molto presto. – moey

0

Penso che stiate cercando la funzione get_browser() in php.

Tenta di determinare le funzionalità del browser dell'utente, cercando le informazioni del browser nel file browscap.ini.

Problemi correlati