In questo articolo cercheremo di capire come fare per ovviare a questi problemi, iniziando a vedere come riconoscere Netscape 6 come browser e di conseguenza come adattare il proprio codice alle nuove esigenze.
Riconoscimento Client-Side
Prima del rilascio di Microsoft Internet Explorer 5.x e di Netscape 6, eravamo abituati a riconoscere Internet Explorer 4.x e Netscape 4.x utilizzando script abbastanza semplici.
Ora la situazione si fa leggermente più complicata, ma non troppo.
- Internet Explorer 4.x si riconosce perché possiede l’oggetto document.all, mentre non supporta il metodo document.getElementById()
- Netscape Navigator 4.x si riconosce perché possiede l’oggetto document.layers.
- Internet Explorer 5.x si riconosce perché possiede l’oggetto document.all, e contemporaneamente supporta il metodo document.getElementById()
- Il nuovo Netscape 6 si riconosce perché non possiede l’oggetto document.all ma supporta il metodo document.getElementById()
Come si può vedere la situazione è un po’ intricata, ma non possono esserci incertezze, è sufficiente scrivere il codice seguente per ottenere una funzione che effettui l’identificazione del browser.
/
È quindi sufficiente utilizzare un oggetto Button all’interno di un Form per ottenere una MessageBox che indichi il browser utilizzato, come nell’esempio seguente:
/
Riconoscimento Server-Side
Anche dal lato server è possibile riconoscere agevolmente il nuovo Netscape 6.0, infatti la variabile server HTTP_USER_AGENT è molto esplicativa e contiene tutte le informazioni che ci servono.
In particolare la HTTP_USER_AGENT fornita da Netscape 6.01 in lingua inglese contiene una stringa del tipo:
“Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; m18) Gecko/20010131 Netscape6/6.01”Pertanto è possibile ottenere una funzione che esegua il test del browser lato server parsificando questa variabile ed andando a cercare con precisione la stringa “Netscape6” che, come si può intuire, è valida per qualunque versione 6.x del browser.
Questo può essere fatto in Javascript Server Side con la seguente funzione:
function browserNS6 ()
{
ns6=false;
a = new String (Request[“HTTP_USER_AGENT”]);
if (a.indexOf(“Netscape6”) != -1)
ns6 = true;
return ns6;
}/
Ecco lo stesso esempio scritto in VbScript
<%
function browserNS6 ()if InStr(1, Request.ServerVariables(“HTTP_USER_AGENT”), “Netscape6”) >1 then
browserNS6 = true
else
browserNS6 = false
End if
End function
%>/
Compatibilità all’indietro
Come è stato in precedenza accennato, per accedere agli oggetti di un documento di utilizzava document.layers per Nestscape 4.x e document.all per Explorer.
Adesso nel DOM di entrambi i browser esiste il nuovo metodo document.getElementById(), solo che mentre Explorer 5.x ha mantenuto la compatibilità all’indietro, la versione 6 di Netscape non riconosce più document.layers, quindi tutti gli script devono essere rivisti se si vuole supportare il nuovo browser.La sintassi per utilizzare questo nuovo metodo è la seguente:
Explorer: variabile = document.all[‘id’]
Netscape 4.x: variabile = document.layers[‘id’]
Netscape 6.x ed Explorer 5.x: variabile = document.getElementById(‘id’)Conclusioni
Come si è visto le differenze ci sono e possono generare qualche piccolo problema, soprattutto per via della mancata compatibilità all’indietro di Netscape rispetto ai layers (peraltro introdotti proprio da Nestcape nella versione 4.x).
Tutti quelli che hanno a che fare con DHTML cross-browser dovrebbero rivedere i propri script per verificarne il funzionamento con le nuove versioni.