5

Ci sono molti modi per il rilevamento del browser in JavaScript.il modo migliore per rilevare il browser in js

Per quanto ne so, utilizzando navigator.userAgent o rilevando funzionalità (come XMLHttpRequest) e così via.

Qualcuno può dirmi qual è il modo migliore e più efficace?

+3

Per rilevare dispone di uso http://www.modernizr.com/ – Idered

risposta

16

Se si ha realmente bisogno di sapere che cosa del browser che stanno usando, si hanno per lo più a guardare la stringa userAgent (anche se a volte è possibile dedurre il browser con la ricerca di un paio di caratteristiche oscure). Tieni presente che alcuni browser consentono all'utente di cambiarlo e mentirti. :-)

Ma il rilevamento del browser è fuori moda, per buone ragioni. Invece, come dici tu, vuoi rilevare le funzionalità che stai cercando. Questo è più affidabile e meno lavoro. Solo perché IE non supportava addEventListener, per esempio, non significa che non lo farà mai (e infatti IE9 lo fa). In questo modo, invece, si rileva la funzionalità, che a prova di futuro il codice.

Ecco un esempio concreto: Supponiamo di voler sapere (come ho fatto per il mio place5 jQuery plug-in) se un browser supporta lo placeholder attribute. È possibile utilizzare il rilevamento del browser e mantenere un elenco di quali browser in cui le versioni hanno o non hanno supporto, che è disordinato e qualcosa a cui si deve continuare a tornare, ecc., O si potrebbe fare questo:

if ("placeholder" in document.createElement("input")) { 
    // The browser supports the attribute 
} 
else { 
    // It doesn't 
} 

... e il gioco è fatto.

C'è un grande set di test di funzionalità in this page gestito da kangax. C'è anche una libreria chiamata Modernizr che esegue il rilevamento delle funzioni, le query multimediali e altro ancora. Se si utilizza jQuery, ha alcune funzionalità di rilevamento incorporate tramite jQuery.support. C'è una bella discussione sui vari aspetti del rilevamento delle funzionalità, delle query multimediali, del rilevamento dei fattori di forma (tablet, telefono o PC?) In this article.

+0

SOLO quello che mi serviva! rilevare IE9 e sotto. – vsync

+0

@ T.J. Crowder - d'accordo con la scelta di rilevamento funzione invece, ma cosa succede se si sta cercando di rilevare il browser per aggirare un bug? Un bug che non puoi testare o che bloccherebbe il browser? – johntrepreneur

+0

@ T.J. Crowder - a parte la mia domanda precedente, ho bisogno di trovare i browser da IE9 a IE7 e un buon modo legittimo per farlo (basato sui tuoi commenti sul rilevamento delle caratteristiche) sarebbe quello di usare i commenti condizionali (supportati fino a I9) che impostano una variabile. Destra? – johntrepreneur

6

Non si individuano i browser. Invece controlli le caratteristiche disponibili.

La rilevazione dei browser può essere risolta (diavolo .. Ho dovuto farlo da sola quando uso Opera su Gmail alcuni anni fa), ma se il browser ha una funzionalità, allora sai che puoi usarla.

+0

Ci sono casi in cui devi conoscere il browser specifico in modo da poter, ad esempio, fornire un messaggio specifico browser. –

+0

E che cosa si direbbe messaggio magico? –

+0

Ebbene, nel mio caso, le istruzioni per abilitare WebGL in Safari. –

0

Si può provare questo http://www.quirksmode.org/js/detect.html

Ma come altri hanno notato, si dovrebbe cercare di utilizzare il rilevamento funzione, ma a volte è solo non basta. Per esempio, quando qualche caratteristica funziona solo troppo male/lentamente ecc

Un altro grande strumento per il rilevamento funzione è Modernizr

0

rilevamento caratteristica è una scorciatoia per il rilevamento del browser. Come già elencato, è più importante sapere che una funzionalità è supportata dal browser o meno, piuttosto che rilevare il browser. Il seguente link vi aiuterà a distinguere tra i browser a seconda degli oggetti supportati da loro: http://www.javascriptkit.com/javatutors/objdetect3.shtml

Tuttavia, se si desidera solo per rilevare il browser solo per il bene sul conoscere, è meglio usare Navigator piuttosto che controllare vari caratteristiche controllando le condizioni.