Ciò che contraddistingue Internet Explorer dagli altri browser è l'assegnazione dell'oggetto XMLHttpRequest
. Non solo è parte di un ActiveX e quindi esposto maggiormente a restrizioni sulla configurazione del browser dell'utente, ma è anche supportato, seppur malamente, dalla versione 4.
Volendo evitare di mostrare errori a chi naviga con questa vecchia versione è necessario verificare che la stringa MSIE 4 non sia presente nel nome che contraddistingue il browser, ovvero navigator.userAgent
, che per sicurezza ancora maggiore viene assegnato ad una variabile dopo essere stato cambiato nel corrispettivo in maiuscolo.
Prima ancora è necessario controllare che il supporto all'oggetto XMLHttpRequest
sia nativo o che il browser sia almeno di tipo Internet Explorer.
Listato 1. Dichiarazione dell'oggetto XMLHttpRequest cross-browser
// funzione per assegnare l'oggetto XMLHttpRequest
// compatibile con i browsers più recenti e diffusi
function assegnaXMLHttpRequest() {
// lista delle variabili locali
var
// variabile di ritorno, nulla di default
XHR = null,
// informazioni sul nome del browser
browserUtente = navigator.userAgent.toUpperCase();
// browser standard con supporto nativo
// non importa il tipo di browser
if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
XHR = new XMLHttpRequest();
// browser Internet Explorer
// è necessario filtrare la versione 4
else if(
window.ActiveXObject &&
browserUtente.indexOf("MSIE 4") < 0
) {
// la versione 6 di IE ha un nome differente
// per il tipo di oggetto ActiveX
if(browserUtente.indexOf("MSIE 5") < 0)
XHR = new ActiveXObject("Msxml2.XMLHTTP");
// le versioni 5 e 5.5 invece sfruttano lo stesso nome
else
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
return XHR;
}
La funzione mostrata è solo una delle tante presenti in rete per istanziare un oggetto XMLHttpRequest
a seconda del browser e della sua versione ma è una delle poche che raramente potrà fallire o generare errori anche su computer non ancora aggiornati.
Il concetto alla base è tentare di filtrare i browser riconosciuti come validi per l'utilizzo di AJAX e sfruttare l'eventuale ritorno nullo a proprio favore, inizializzando l'intero applicativo AJAX solo se l'oggetto è riconosciuto come valido.
Un esempio di quanto appena detto potrebbe essere questo:
Listato 2. Riconoscere un browser abilitato ad AJAX
onload = function() {
var ajax = assegnaXMLHttpRequest();
if(ajax) {
// applicativo AJAX
}
}
dove qualora l'oggetto non dovesse essere stato assegnato o dovesse essere ancora nullo o false, non si disturberebbe l'utente arrivato con messaggi di errore o con la comparsa del triangolo giallo solitamente mostrato ogni qualvolta siano presenti dei problemi nella pagina visualizzata.