JavaScript  »  Guide  »  Guida jQuery 

Browser e Feature Detection



Una delle funzioni più diffuse nelle librerie JavaScript e più usata dagli sviluppatori è il browser detection (o browser sniffing), cioè la possibilità di determinare quale browser stia utilizzando l'utente. In jQuery la funzionalità viene delegata alle proprietà dell'oggetto $.browser. In particolare viene impostata  su true la proprietà relativa al browser in uso. Ecco i valori che troveremo se l'utente usa Internet Explorer:

$.browser.msie == true
$.browser.safari == false
$.browser.opera == false
$.browser.mozilla == false //Mozilla e Firefox

Per raffinare ulteriormente la ricerca è possibile ricavare la versione del browser in uso dalla proprietà $.browser.version. Riprendendo l'esempio precedente, ipotizziamo che il browser sia Internet Explorer 7:

$.browser.msie == true
$.browser.version == "7.0"

Una particolarità dell'oggetto $.browser è che viene reso disponibile prima del caricamento del DOM, rendendolo utile per associare eventi onDOMReady solo per certi browser:

if ($.browser.msie) {
    $(function () {
        alert("DOM caricato in IE!");
    });
}

In realtà dalla versione 1.3 l'uso di questo oggetto è sconsigliato in favore di $.support che, piuttosto del tipo di browser, determina quali siano le caratteristiche attive o disponibili sul browser dell'utente.
Questo cambiamento di rotta è legato alla constatazione che, la maggior parte delle volte, il browser detection serve a determinare il supporto o meno di certe caratteristiche in un browser, oppure ad attivare workaround per specifici bug.
Ricercare direttamente queste proprietà rende quindi tutto più diretto e soprattutto slega il codice dagli errori derivanti dall'avvento di nuove versioni dei browser.

Ecco in sintesi le proprietà disponibili (impostate su true se presenti):

  • boxModel: il browser rispetta il W3C CSS Box Model? (falso in IE 6 e 7 in Quirks Mode, equivale a $.browser.boxModel in jQuery 1.2)
  • cssFloat: è possibile accedere al valore CSS float con style.cssFloat (falso in IE)
  • hrefNormalized: il risultato di .getAttribute("href") è lasciato intatto? (falso IE)
  • htmlSerialize: gli elementi link sono serializzati correttamente con .innerHTML? (falso in IE)
  • leadingWhitespace: gli spazi vuoti iniziali sono preservati con .innerHTML? (falso in IE 6-8)
  • noCloneEvent: quando un elemento viene duplicato gli eventi collegati NON sono clonati? (falso in IE)
  • objectAll: lanciando .getElementsByTagName("*") su un elemento restituisce tutti i suoi discendenti (falso in IE 7 e 8)
  • opacity: esiste la proprietà CSS opacity? (falso in IE)
  • scriptEval: Gli script vengono eseguiti se sono inseriti nel DOM con .appendChild() o .createTextNode() (falso in IE)
  • style: .getAttribute("style") legge lo stile inline di un elemento? (falso in IE)
  • tbody: il browser accetta una tabella senza un elemento tbody? (falso in IE)


Nelle future versioni di jQuery $.support rimarrà l'unico mezzo per determinare il browser dell'utente ed il suo supporto a determinate caratteristiche. Se proprio lo volessimo usare per identificare Internet Explorer 6 potremmo comunque scrivere:

if (!$.support.cssFloat && $.support.objectAll) {
//codice per IE < 7
}

Ultimi articoli JavaScript

PhantomJS, headless browser per test con Javascript

Il tool ideale per realizzare, da terminale, operazioni in remoto su...

Creare e leggere QR Code in JavaScript

Applicazioni 'QR Code enabled' per il Web e per il mobile,...

Jquery UI Map: web-mapping con Google Maps e jQuery

Un plugin di jQuery UI per intefacciare applicaizoni Web/mobile con...

Scrollorama e Scrolldeck, slideshow d'effetto con jQuery

Plugin jQuery per ottenere Slideshow con diversi effetti di scrolling

jCanvas, un primo semplice grafico

Alla scoperta della libreria jCanvas, per semplificare il disegno e...

Altri articoli

Guide JavaScript

Guida Node.js

Il framework che permette di per usare V8, l'interprete JavaScript...

Canvas, guida ai framework

Canvas, tra gli elementi di HTML5 è forse quello di maggior impatto....

Guida Javascript: tecniche avanzate

Una guida dal taglio pratico per approfondire la programmazione a...

Altre guide

Newsletter @JavaScript

Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso JQuery e Ajax per Webmaster

03 Luglio 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti