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 […]

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.