AJAX, JavaScript support and screen reader accessibility

Making websites and web based applications that use a lot of JavaScript accessible isn't as easy as just making sure that there is a non-JavaScript fallback. Yes, you always need to make sure that your site degrades gracefully in user agents that do not support JavaScript. But that isn't always enough.

One reason is how dynamic changes to page content are handled by screen readers. This has been a bit of an unknown area, but a couple of recent reports provide some answers. James Edwards, a.k.a. Brothercake, has done some research and written an article based on the results: AJAX and Screenreaders: When Can it Work?. The article shows that there are a lot of problems, and James comes to the following conclusion:

I'm forced to conclude that, unless a way can be found to notify screen readers of updated content, AJAX techniques cannot be considered accessible, and should not be used on a production site without a truly equivalent non-script alternative being offered to users up-front.

James isn't the only one who's been taking a closer look at how screen readers handle dynamic changes to a page. Joe Clark has conducted user testing of Basecamp, asking ten screen reader users to accomplish three simple tasks in the application. Joe presented the results at Iceweb 2006, and an edited version of the speaking notes are available online in Build Half a Product: Is Ajax accessible? At all? The results show that while it isn't entirely impossible for screen reader users to use Basecamp, it isn't easy:

The conclusion I have from my testing is that Ajax has problems. Maybe not fatal problems, but problems nonetheless.

If knowing that screen reader users are likely to have problems isn't enough to make you worried, maybe reading about in-between scenarios such as the one Robert Nyman describes in An important lesson learned about AJAX and accessibility is. The scenario, which is probably not uncommon for large companies, is that JavaScript is supported and enabled in the web browser, but a proxy server removes certain scripts before they reach the browser. Since the browser has JavaScript enabled it won't use any noscript content that you provide either.

The screen reader testing and the proxy scenario both clearly show that we need to keep in mind that JavaScript support isn't just a question of yes or no.