8 de abril de 2010

Accesibilidad y RIAs basadas en Javascript+DOM

Buenos días:

Hoy me he levantado, he buscado "GWT accesibility" en Google y me he llevado una de las sorpresas más gratas en mucho tiempo.

Parece ser que después de tanto despotricar sobre la basura que es la implementación de accesibilidad en los navegadores actuales, en foros y demás lugares, alguien, con más de dos dedos de frente, me ha oído en el W3C y ha decidido desarrollar una tecnología lógica (al nivel de un cerebro humano, no del de un lagarto, me refiero) para que los lectores de pantalla funcionen con las aplicaciones que hacen una manipulación intensiva del DOM.

La especificación marcada como "trabajo en progreso" es WAI-ARIA y se trata de una forma de añadir metadatos al HTML para describir cada widget de la página. Es decir, que el lector ya no tiene que sacar la bola de cristal para interpretar el HTML sino que el desarrollador le dice, explícitamente, donde está cada widget y qué es lo que hace y que datos tiene.

Este mecanismo es el mismo que usa Swing accesible, Flash (sí Flash, Flash es/puede ser accesible en realidad, aunque no cumpla con los criterios del WAI) y muchas otras tecnologías. Así que parece que, después de mucho tiempo, alguien ha caído en la cuenta de que intentar interpretar un cerro de etiquetas HTML para "cantarle" una pantalla a un invidente es una soberbia mamarrachada, además de bastante difícil o imposible.

Por supuesto la solución tradicional a este problema ha sido echarnos la culpa a los desarrolladores y decirnos que hagamos webs más legibles por el JAWS o lo que toque. Si lo pensáis bien viene a ser como si nos dijese Sun a los desarrolladores de Java que no usemos todo el API porque luego los .class son más difíciles de descompilar para otras herramientas que tienen ellos. Señores: cambien esas herramientas o cambien el API, pero no me den a mi la murga.

Es una pena que nos hayan estado machacando tanto tiempo con la cantinela de la accesibilidad y del "no uséis Javascript ni tablas" cuando, obviamente, era un problema de otros: de los navegadores o del estandar HTML en si.

Y es una pena que como todo el mundo quiere ser políticamente correcto, no se pueda hablar de ello claramente sin ofender a las personas que necesitan que las aplicaciones sean accesibles.

En fin, "c'est la vie". Aquí os dejo los enlaces a la entrada en el blog de GWT que hablaba de WAI-ARIA y a la especificación en si en el W3C:


No sabéis lo a gusto que me he quedado. Espero que esto de ARIA tire "p'alante" y que algún día la web sea realmente accesible, no sólo de boquilla.

6 de abril de 2010

JSF y accesibilidad

Hace tiempo estuvimos hablando de JSF y accesibilidad en un hilo de JavaHispano. El hilo se puede visitar siguiendo este enlace.

La cosa quedo como que JSF no puede ser usado si el Javascript está deshabilitado en el navegador. Esto es porque, como mínimo, el componente h:commandLink necesita Javascript para enviar los formularios por POST e implementar los eventos que define la especificación JSF. Por supuesto se podría optar por usar JSF sin h:commandLink, pero eso sería un poco infernal, feo, y limitaría demasiado JSF como para que tuviese sentido usarlo.

Pues bien, resulta que he seguido indagando y he encontrado una solución (un poco chapucera) pero que permitiría, en teoría, usar JSF sin tener Javascript activado.

La solución es similar a la que usa en Spring Web Flow el componente sf:commandLink. Consiste en crear una implementación del componente h:commandLink que detecta si está o no activo el Javascript y, si no lo está, "renderiza" un botón en vez de un enlace. Por supuesto, la web quedará más fea, pero por lo menos cumple el cometido de funcionar sin Javascript.

Otra cosa es si alguien se ha preocupado de hacer una implementación de JSF que cumpla con la norma AAA de accesibilidad, porque, aunque esto permite en la teoría hacer una implementación de JSF que no use Javascript, lo cierto es que creo que no hay ninguna ahora mismo que cumpla estos criterios totalmente.

Pero poderse, se puede, que era la idea ;-)