Argomenti trattati: l'oggetto navigator; alcune tecniche per distinguere le caratteristiche del browser in uso.
L'oggetto navigator rappresenta il browser. Compito del browser è quello di visualizzare delle pagine web. Se all'inizio queste erano essenzialmente semplici e basate sull'HTML, via via sono divenute più complesse. Al browser non è richiesto soltanto di visualizzare del testo, ma anche di interpretare degli script e di attivare dei programmi che permettano funzionalità grafiche e dinamiche estremamente complesse.
E' dunque molto utile distinguere tra browser differenti, che possono avere delle caratteristiche non compatibili, per controllare se il contenuto della pagina web può essere o meno visualizzato correttamente dall'utente.
Metodi | |
---|---|
javaEnabled() navigator.javaEnabled() |
Restituisce True se il browser è abilitato all'esecuzione del codice Java, altrimenti restituisce False. |
plugins.refresh() navigator.plugins.refresh() |
verifica la presenza di un nuovo plug-in, nel cui caso restituirà True. |
taintEnabled() navigator.taintEnabled() |
Verifica se è attiva la rilevazione degli errori nei dati, nel qual caso restituirà True. |
Proprietà | |
appName navigator.appName |
nome ufficiale del browser |
appCodeName navigator.appCodeName |
nome in codice del browser |
appVersion navigator.appVersion |
versione del browser |
language navigator.language |
lingua supportata dal browser |
mimeTypes navigator.mimeTypes |
Array dei tipi MIME
supposrati dal browser |
platform navigator.platform |
riferimento al sistema operativo |
plugins navigator.plugins |
plug-in del browser |
userAgent navigator.userAgent |
rappresentazione del valore dell'intestazione User-Agent |
Per visualizzare le proprietà del browser in uso, utilizzate il collegamento sottostante:
visualizza le proprietà del browser
In particolare solo il browser Netscape Navigator supporta l'Array mimeTypes
e l'Array plugins.
Questi sono anche oggetti, per la cui discussione si rimanda alla pagina
sottostante:
MSIE supporta invece le proprietà systemLanguage e userLanguage, mentre per Netscape la proprietà è language.
Data la differenziazione di codice che spesso è richiesta affinché
uno script funzioni su più browser, è necessario utilizzare un codice che
permetta di rilevare il browser utilizzato dall'utente.
Vi sono in effetti molteplici modi per farlo, in alcuni casi dipendenti da come
è stata implementata la stringa che definisce il nome dell'applicativo o alcune
sue caratteristiche.
Possono essere usate le proprietà dell'oggetto navigator (da
questo punto in poi, è necessario non confondersi tra navigator come
oggetto e Navigator come nome del browser).
Uno dei metodi consiste nell'utilizzare la proprietà appName:
if.navigator.appName.indexOf("Netscape")!=-1
Questo perché è visualizzabile che la proprietà appName di Navigator restituisce:
appName=Netscape
mentre la stessa proprietà, in Explorer, restituisce:
appName=Microsoft Internet Explorer
oppure:
if((navigator.appVersion.indexOf("MSIE")>0)
poiché, mentre Navigator restituisce
appVersion=4.76 [en] (Win95; U),
Explorer restituisce:
appVersion=4.0
(compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
Ricordiamo che il metodo indexOf(), in una stringa, permette di riconoscere se in essa è presente un'occorrenza di una certa sottostringa, poiché ne restituisce la posizione a partire da zero. Se la sottostringa non è presente, restituisce -1.
Poiché le diverse versioni di JavaScript si basano sulle versioni dei browser, è necessario conoscere anche la versione del software utilizzato dall'utente. Può essere perciò necessario convertire in un valore numerico la stringa relativa alla versione, nel seguente modo:
parseInt(navigator.appVersion)>=4.
(per rivedere l'utilizzo di parseInt(), clicca sul
collegamento)
Un altro metodo consiste nel rilevare se il browser supporta un certo
oggetto o una sua proprietà, tra cui ad esempio l'attributo all
(MSIE)
o l'attributo layers (Navigator).
La condizione allora sarà:
if (document.all)
oppure, si potrebbe scrivere:
if(document.layers!=null)
I 2 metodi, permetterebbero di identificare rispettivamente Microsoft Internet Explorer e Navigator o, per essere più precisi, di identificare rispettivamente che si tratta di una versione di MSIE che supporta la collezione document.all (almeno la 4) o di una versione di Netscape Navigator (la 4 o la 5) che supporta l'Array document.layers.
Proprio per questo motivo, nonostante la distinzione tra i 2 browser sia spesso effettuata in questo modo, si tratta di una metodologia impropria che può comportare delle situazioni non volute.
Va innanzitutto compreso come la "guerra" tra browser di diverse case produttrici abbia portato a utilizzare dei componenti che si riflettono sulle possibilità del codice JavaScript in modo molto diverso, rendendo impossibile utilizzare per entrambi i browser lo stesso codice e in alcuni casi andando oltre le specifiche W3C e ECMA.
Questa situazione compromette in alcuni casi il funzionamento di script elaborati, oltre a rendere complicato capire cosa funzioni e su quale browser.
Può risultare utile la seguente tabella:
Versione di JavaScript | |||||
---|---|---|---|---|---|
1.0 | 1.1 | 1.2 | 1.3 | 1.4 | |
Explorer | 3.0 | 4.0 | 5.0 | ||
Navigator | 2.0 | 3.0 | 4.0 | 4.5 | 5.0 |
Essa mostra in linea generale quale versione di JavaScript sia supportata dalle versioni dei 2 browser.
In realtà è alquanto difficile generalizzare le singole proprietà del browser in riferimento alle possibilità del codice JavaScript, dato che esistono diverse "sottoversioni" delle stesse versioni e così via, quasi a voler complicare sempre di più la vita del programmatore.
Indipendentemente dal metodo scelto per identificare il browser in uso e per aggirare eventuali ostacoli, può dunque essere utile fornire alcuni suggerimenti.
Innanzi tutto non si può pretendere che gli utenti abbiano aggiornato o scaricato la versione più recente del browser su cui un certo script è stato testato. Una soluzione valida può essere quella di fornire delle pagine alternative se un certo browser non è stato riconosciuto.
Lo stesso HTML consente di evitare inconvenienti per browser che non supportino i frames, i layers o lo stesso JavaScript, con appositi tag:
<NOFRAMES>qui aggiungo il codice per il browser che non
supporta i frames</NOFRAMES>
<NOLAYER>qui aggiungo il codice per il browser che non supporta i layers</NOLAYER>
<NOSCRIPT>qui aggiungo il codice per il browser che non supporta gli script</NOSCRIPT>
Altrimenti si può inviare l'utente su un'altra pagina, ad esempio usando l'oggetto location e i suoi metodi.
Un'altra possibilità è offerta dai diversi nomi e dai diversi linguaggi di scripting usati dalle case produttrici: jscript e vbscript, con delle precise specifiche Microsoft, che si differenziano da JavaScript.
In questo modo si potrà scrivere:
<script language="JavaScript">
/*qui va il codice JavaScript */
</script>
<script language="JScript">
/*qui va il codice JavaScript specifico per
Internet Explorer 4, con caratteristiche non disponibili per altri browsers */
</script>
<script language="VBScript">
/*qui va il codice vbscript, linguaggio di
scripting completamente diverso da JavaScript
specifico per Internet Explorer, con caratteristiche non
disponibili per altri browsers */
</script>
Bisognerebbe inoltre tenere presente che quando si basa l'esecuzione di uno script sull'esistenza di un certo oggetto o di una certa proprietà di un oggetto non si distingue propriamente il browser, né la sua versione.
Come sopra descritto, la proprietà document.all è testabile e presente su Internet Explorer 4, 5 6 e probabilmente (???) versioni future. Per Netscape 4 e 5 si può ricorrere all'Array document.layers, utilizzato frequentemente per creare script dinamici, mentre per Netscape 6 e 7 non è disponibile.
Questo argomento, di fondamentale importanza per scrivere un codice corretto e applicabile su piattaforme diverse, è stato approfondito nella relativa sezione.