Inutile negare l'evidenza: le incompatibilità tra Netscape e Microsoft Internet Explorer sono un limite non indifferente allo sviluppo di siti e applicazioni per il Web publishing.
Chi è solito cimentarsi nella creazione si siti Web avrà più volte deprecato l'insensato (se non visto da ottica commerciale) differente approccio che i due browser propongono. Ma tant'è, chi sviluppa siti Web deve tener conto di questo stato di cose e comportarsi di conseguenza.
Un sito deve poter raggiungere il numero più alto di visitatori, perseguendo tre finalità:
- grafica ricercata;
- navigabilità;
- soluzioni tecniche avanzate.
Per i primi due punti non si puo' che affidarsi alle capacità creative degli sviluppatori, mentre per il terzo punto si pone un problema di più difficile soluzione: quali tecniche adottare visto che Netscape e MSIE usano tecnologie differenti? Per taluni la risposta a questa domanda è in tecnologie di compromesso (pensiamo al dynamic HTML crossbrowser), ma per altri l'unica strada percorribile è una doppia versione del sito, rispettivamente per Netscape e MSIE. Non entriamo nel merito di una decisione che dipende da scelte degli sviluppatori, ma vogliamo con questo script dare una parziale soluzione al problema.
Quando si decide che un sito debba avere una doppia versione il primo problema è di indirizzare i visitatori ora all'una, ora all'altra. Questo si puo' fare agevolmente con una pagina HTML statica con due normalissimi link, ma si tratta di una soluzione grossolana.
Javascript permette di indirizzare automaticamente i visitatori vero pagine differenti in base al browser ed alla versione. L'esempio di questa settimana dimostra come fare.
L'esempio si compone di 3 file:
- esempio.htm
- msie.htm
- netscape.htm
Il file "msie.htm" simula la pagina ottimizzata per MSIE.
Il file "netscape.htm" simula la pagina ottimizzata per Netscape.
Per una più semplice comprensione del presente script fai continuamente riferimento ai file sopracitati, verificando le procedure e i dati espressi. Solo in questo modo, con un continuo confronto, comprenderai le peculiarità di questo Javascript.
"Esempio.htm" è il file che contiene il codice Javascript che interessa ai fini della nostra spiegazione, e che simula il file principale del tuo sito Web. In altre parole questo deve essere il file che viene letto per primo quando si accede al sito. Solitamente è un file denominato "index.html", ma anche "default.htm" e "index.htm".
Questo il codice da inserire nel file:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="refresh" content="1;url=msie.htm"></head>
<body>
<script>
function msieversion()
{
var ua = window.navigator.userAgent
var msie = ua.indexOf ( "MSIE " )
if ( msie> 0 )
{
if ( msie <4 )
alert( "Stai usando MSIE 3. Per una corretta visualizzazione di queste
pagine ti consigliamo la versione 4 o successiva" )
}
else
{
scelta=confirm("Stai usando Netscape. Questo sito è ottimizzato per MSIE4
o successivo. Verrai indirizzato ad una versione specifica per Netscape 4.")
if (scelta)
location="netscape.htm"
}
}
</script>
<body onload="msieversion()">
</body>
</html>
Il messaggio:
alert( "Stai usando MSIE 3. Per una corretta visualizzazione di queste pagine ti consigliamo la versione 4 o successiva" )
è quello visualizzato quando lo script verifica l'uso di MSIE nella versione 3 o precedente.
Il messaggio:
scelta=confirm("Stai usando Netscape. Questo sito è ottimizzato per MSIE4 o successivo. Verrai indirizzato ad una versione specifica per Netscape 4.")
if (scelta)
location="netscape.htm"
è visualizzato quando lo script verifica l'uso di Netscape (qualsiasi versione).
Fai molta attenzione alla riga :
location="netscape.htm"
in quanto "netscape.htm" è il nome del documento successivo da visualizzare per chi usa Netscape.
Per chi usa Microsoft Internet Explorer 4 o successivo, invece, non viene visualizzato alcun messaggio e in base al meta tag:
<meta http-equiv="refresh" content="1;url=msie.htm">
viene indirizzato alla pagina "msie.htm" specifica per gli utenti di questo browser.
Perchè lo script produca i suoi effetti è necessario inserire all'interno del tag <body> il gestore di eventi onload:
<body onload="msieversion()">