Ajax e Jaws: i rapporti migliorano

Traduzione dell’articolo di Gez Lemon e Steven Faulkner ”Improving Ajax applications for JAWS users pubblicato il 10 settembre 2006 su  Juicy Studio

Premessa

Gli screen reader di uso più comune utilizzano un buffer virtuale per permettere agli utenti di interagire con in contenuti di una pagina Web. Questo articolo vuole evidenziare alcuni comportamenti non documentati in Jaws 7.1 e successivi, che permettono agli sviluppatori Web di costruire applicazioni Ajax in grado di aggiornare il buffer virtuale senza alcun intervento diretto da parte dell’utente.

Il buffer virtuale

In un precedente articolo, abbiamo dimostrato come le applicazioni Ajax possono essere rese accessibili per gli screen readers . In buona sostanza, ciò richiede da parte degli utenti la comprensione del concetto di buffer virtuale, e la conoscenza dei metodi per aggiornarlo. Comprendere il buffer virtuale è essenziale per gli utenti avanzati di screen reader, ancor più se si considera il numero di applicazioni Web 2.0 che sono basate su Ajax. Gli screen reader, solitamente, effettuano un’istantanea della pagina Web e ne mettono il contenuto all’interno di un buffer virtuale allo scopo di far interagire l’utente con il contenuto.

Gli screen reader che utilizzano il buffer virtuale mettono a disposizione degli utenti anche dei comandi per manipolare il buffer, come p per navigare sul paragrafo successivo. Quando un utente di screen reader cerca di inserire dati all’interno di un form, il buffer virtuale non può essere attivo, altrimenti i tasti premuti dall’utente potrebbero finire con interagire con il buffer anziché con i controlli del form. Per esempio, se un utente di screen reader intende inserire la parola “Harry” in una casella di testo, alla pressione del tasto H la maggior parte degli screen reader si posizionerebbe sull’intestazione successiva (o precedente con Shift + H), visto che lo scopo del buffer è proprio quello di fornire un meccanismo per garantire l’interazione col contenuto HTML.

Attivando e disattivando il buffer virtuale è possibile anche aggiornarne il contenuto, anche se di solito esiste un comando specifico per far ciò. Per esempio, il buffer virtuale può essere aggiornato in Jaws in qualsiasi momento con la combinazione di tasti Insert + Esc. E questo è uno dei comandi più potenti in mano agli utenti di screen readers – se un utente interagisce con un’applicazione che sembra non rispondere, la cosa migliore da fare è aggiornare manualmente il buffer virtuale e riesplorarne il contenuto.

Miglioramenti in Jaws

In Jaws 7.1 e successivi, Freedom Scientific ha introdotto una funzionalità che rende un po’ più semplice per gli sviluppatori prendere in considerazione gli utenti di screen reader nello sviluppo di applicazioni Ajax. Nelle versioni precedenti, il buffer virtuale veniva sempre aggiornato “all’indietro” quando veniva premuta la barra spaziatrice per attivare un controllo di un form; cioè, il buffer virtuale conteneva quanto mostrato sullo schermo prima dell’ultimo aggiornamento (questo articolo prende in considerazione solo IE6 e 7, visto che Firefox ha un supporto limitato per Jaws che si sposa al meglio con IE, il quale ha rappresentato la scelta privilegiata di Freedom Scientific). In altre parole, esisteva una discrepanza fra quanto visualizzato sullo schermo e quanto Jaws riportava ad i suoi utenti.

In Jaws 7.1 e successive, tutte le modifiche dinamiche risultanti dall’attivazione di un link con la tastiera da parte dell’utente aggiornano il buffer virtuale, in quale risulta quindi sincronizzato col contenuto sullo schermo. Si tratta di una significativa miglioria di Jaws, per la quale l’utente non deve preoccuparsi di aggiornare il buffer virtuale. Però molte applicazioni di tipo Ajax aggiornano il contenuto rispetto alle interazioni su una gran varietà di controlli nei forms, e Jaws non aggiorna il buffer in risposta a questi controlli. Il buffer virtuale non viene aggiornato anche quando si utilizza il mouse per interagire con un elemento dell’interfaccia; questo avviene probabilmente perché Freedom Scientific ritiene che la maggioranza dei suoi utenti sia non vedente (ed incapace quindi di utilizzare un dispositivo di puntamento), anche se lo screen reader viene comunemente utilizzato anche da utenti con disabilità cognitive o dell’apprendimento.

La funzione Update Virtual Buffer

In Jaws 7.1 e successive, alcune istruzioni di script causano l’aggiornamento del buffer virtuale senza alcuna interazione da parte dell’utente. Per esempio, in certe condizioni, il contenuto aggiornato per mezzo di innerHTML causerà l’aggiornamento; dopo di esso, il buffer non conterrà quanto è stato aggiunto con innerHTML, bensì il contenuto precedente rispetto alla chiamata della funzione, quindi esso potrebbe essere utilizzato alla fine di una chiamata Ajax per aggiornare il buffer virtuale. In apparenza si tratta di un ottimo approccio, peccato che innerHTML non sia compatibile col DOM. Inoltre, approfondendo la questione, abbiamo scoperto che il buffer virtuale si aggiorna anche quando viene invocato il metodo SetAttribute allo scopo di aggiornare il value di un controllo in un form.

Allora ci siam resi conto che il buffer virtuale in Jaws 7.1 poteva essere aggiornato automaticamente con due semplici funzioni: una che aggiunge un controllo nascosto al documento, l’altra che aggiorna l’elemento nascosto in risposta ad una chiamata Ajax. La funzione prepareBuffer aggiunge un elemento “input” nascosto alla fine del documento avente il nome virtualbufferupdate; questa funzione dovrebbe essere aggiunta quanto prima è possibile, idealmente quando la pagina viene caricata.

function prepareBuffer()

{

    var objNew = document.createElement(‘p’);

    var objHidden = document.createElement(‘input’);

    objHidden.setAttribute(‘type’, ‘hidden’);

    objHidden.setAttribute(‘value’, ‘1’);

    objHidden.setAttribute(‘id’, ‘virtualbufferupdate’);

    objHidden.setAttribute(‘name’, ‘virtualbufferupdate’);

    objNew.appendChild(objHidden);

    document.body.appendChild(objNew);

}

La funzione updateBuffer aggiorna il valore del controllo nascosto, il che garantisce l’aggiornamento del buffer virtuale. Questa funzione dovrebbe essere invocata verso la fine della funzione di callback assegnata al gestore di eventi onreadystatechange per la chiamata Ajax.

function updateBuffer()

{

    var objHidden = document.getElementById(‘virtualbufferupdate’);

    if (objHidden)

    {

        if (objHidden.getAttribute(‘value’) == ‘1’)

            objHidden.setAttribute(‘value’, ‘0’);

        else

            objHidden.setAttribute(‘value’, ‘1’);

    }

}

Lo pseudo-codice per la nostra applicazione completa potrebbe essere:

function init()

{

    // Istruzioni richieste dalla funzione init

    someElement.onclick = function(){return updateContent(this);};< /SPAN >

    prepareBuffer();

}

function updateContent()

{

    // Impostazione dell’oggetto XML HTTP request

    // …

    if (objXMLRequest)

    {

        objXMLRequest.onreadystatechange = processResult;< /SPAN >

        objXMLRequest.open(‘GET’, ‘somefunc.php’, true);

        objXMLRequest.send(null);

    }

    return true;

}

Conclusioni

Jaws 7.1 introduce significativi miglioramenti rispetto alle versioni precedenti, in quanto il buffer virtuale viene aggiornato automaticamente in risposta all’attivazione di un link con la tastiera. La  funzione updateBuffer, presentata in questa sede, estende queste migliorie fornendo un meccanismo utile ad aggiornare il buffer virtuale per altri elementi dell’interfaccia, indipendentemente dal device di input adottato dall’utente.

Quindi gli utenti di Jaws 7.1 e successivi non avranno bisogno di aggiornare esplicitamente il buffer per interagire con le applicazioni Ajax. Naturalmente, il tutto dipende dallo sviluppatore che dovrà aver cura di prevedere una funzione updateBuffer, o equivalente, il che è largamente preferibile rispetto alla necessità che sia l’utente a comprendere come funziona il buffer virtuale.

In ogni caso, questo hack fornisce agli sviluppatori un modo per aumentare il livello di confidenza e fiducia in Jaws 7.1 da parte degli utenti di screen reader, senza effetti nocivi per tutti gli altri utenti.

Potrebbero interessarti anche i seguenti articoli

  • L’elemento image in HTML 5L’elemento image in HTML 5 Traduzione dell'articolo "The HTML 5 Image Element" di Gez Lemon del 29 agosto 2007 L’attributo longdesc Uno degli aspetti rimarchevoli riguardanti […]
  • Accessibilità di HTML5Accessibilità di HTML5 Traduzione in italiano della risorsa online html5accessibility, di Steven Faulkner Lavori in corso: ottobre 2010 Su questo sito vi è anche: accorgimenti per il […]
  • L’accessibilità di AJAXL’accessibilità di AJAX Traduzione dell'articolo "Ajax accessibility" di John Resig Una diffusa preoccupazione sulla maggior parte delle applicazioni Ajax riguarda la loro accessibilità. E' […]
  • Calendario senza tabella? Da oggi è possibile!Calendario senza tabella? Da oggi è possibile! Ultimamente su una lista alla quale partecipo quotidianamente, è stata posta una domanda relativa a calendari accessibili e tabelle. Quella discussione ha […]
  • Quanti termini nel web semanticoQuanti termini nel web semantico Prefazione Da poco abbiamo iniziato a parlare di questo nuovo web che è il web semantico e già in un primo articolo ne abbiamo illustrato a grandi linee […]
Condividi:

Informazioni sull'autore

Roberto Castaldo
Roberto Castaldo
Sono nato e vivo a Napoli, ed opero professionalmente nel mondo dell'informatica da più di vent'anni. In realtà l'informatica, insieme alla musica e ad altre poche cose, è stato da sempre un mio chiodo fisso, e la buona sorte mi ha aiutato a trasformarlo in un mestiere. Sin dalle mie primissime esperienze lavorative - insegnavo dattilografia ed i primi rudimenti di informatica in una scuola privata - mi sono trovato a mio agio nel settore della formazione e della divulgazione, certamente aiutato dai miei studi classici. Nel 1987 ho iniziato la mia attività come insegnante d'informatica in un Istituto Professionale Statale - per circa due anni sono stato il più giovane insegnante di ruolo d'Italia. Ho avuto svariate esperienze anche nel settore privato come sviluppatore (TPascal - lo ricordate? - VB, ASP e, più di recente VB.NET ed ASP.NET), ma soprattutto come docente e come divulgatore. Ho effettuato attività di formazione presso le più grandi realtà imprenditoriali italiane (IBM, Omnitel, Telecom Italia, TIM, Unicredito, Ekip, BNL, SSGRR), ma anche all'estero in qualità di docente e/o progettista di percorsi formativi; gli argomenti spaziano dal mondo Office fino al multimedia ed alla programmazione avanzata ASP ed ASP.NET. Ho collaborato con l'Istituto Italiano per gli Studi Filosofici di Napoli, ho redatto articoli/tutorial per un'importante rivista informatica (Win98 Magazine), ed ho partecipato allo sviluppo di CD-Rom Multimediali (IBM, Selfin, BNL) curando personalmente la registrazione dei commenti audio ed il montaggio delle musiche (CoolEdit), l'eventuale connessione a database remoti, l'assemblaggio degli elementi testuali, grafici e multimediali (Director 8) fino alla creazione del master definitivo. Negli anni 1998-2000 ho collaborato con la Gazzetta dello Sport Online curando, in occasione dei più importanti avvenimenti sportivi (Mondiali ed Europei di calcio, Giro d'Italia, Campionato di Serie A) le pagine contenenti la traduzione in inglese e francese degli articoli in italiano. Il mio compito consisteva nell'inviare ai miei traduttori la cronaca in italiano, riceverne la traduzione, creare le pagine inglesi e francesi del sito www.gazzetta.it e pubblicarle sul server, il tutto entro 90 minuti dalla fine dell'evento. Nel frattempo, mi avvicinavo in maniera sempre più approfondita alle problematiche legate all'accessibilità di siti web, progettando percorsi di formazione ad hoc, ed aderendo entusiasticamente al progetto webaccessibile.org. Sono stato per diversi mesi membro del XML Protocol Working Group del W3C, ed attualmente partecipo ai lavoro del WAI Web Content Accessibility Guidelines (WCAG) Working Group e del E&O Education ad Outreach Working Group.

Commenti

Nessun commento

    Rispondi

    Link e informazioni