Hi everyone,

Late last week, Eli and I spent some time digging into some of the a11y issues we've encountered with SWFUpload and Flash 10.

As you probably already know, a "security" change in Flash 10 requires us to use a visible Flash movie for the Browse Files button in the Uploader. While the rest of the UI is entirely HTML-based, this requirement has resulted in a number of issues for keyboard navigation and use of assistive technologies.

Firstly, we've found that no role is applied to the Flash object for use by assistive technologies. In essence, the entire SWFUpload object is a giant button, but it was not built using a real Flash Button component. Flash 10 does indeed have support for MSAA roles, so it should be quite possible for a "button" role to be exposed.

Digging into this, we found that Adobe's Flash 10 built-in component accessibility feature has two annoying flaws:

1. It's turned off by default
2. It's not available in their open source Flex SDK. If you want to author accessible widgets, you've got to pay.

There is a more primitive accessibility API provided in Flash 9 and prior, which is available to in the open source Flex SDK. It's quite terrible, but may do the trick. SWFUpload uses the open source Flex SDK, so that's all we've got to work with.

SWFUpload's technique for rendering their own custom Flash button is pretty awkward, and it forces another bug on us: as the browser's size is zoomed up, the button doesn't scale correctly.

That said, there is an avenue for fixing both the role issue and the scaling issue: modify SWFUpload to render a real Flash button, use their old a11y API, and ensure that the button is scalable. This isn't particularly difficult work for a Flash guru, but it does require more chops than either Eli or I have currently. We're both eager to learn, but we need a friend to help us out.

Another issue with a less clearly definite solution: Flash swallows the Tab/Shift-Tab keys on Firefox. This is apparently a very long standing issue:

https://bugzilla.mozilla.org/show_bug.cgi?id=93149

In short, Flash refuses to hand keyboard focus back to the browser. I've come up with a scheme that may work for SWFUpload, but it'll require some experimentation:

1. Add a keyboard listener to SWFUpload's stage, listening in particular for the Tab and Shift-Tab key presses. If these are caught, use Flash's ExternalInterface to call back to some code on the JavaScript side of the world.

2. Write a tab focus manager for the Uploader that is capable of focussing the element in the DOM immediately before or after the Flash movie. This should be fairly straightforward with the new tabbable() method in jQuery UI.

In the meantime, we've got some descriptive alt text on the Flash movie, and we're playing around with adding some ARIA roles and properties to improve the experience. I'd be curious to hear how the experience is for AT users.

If there are any Flash wizards out there who want to help us to improve accessibility of the Uploader, drop us a line.

Colin

---
Colin Clark
Technical Lead, Fluid Project
Adaptive Technology Resource Centre, University of Toronto
http://fluidproject.org

_______________________________________________________
fluid-work mailing list - [email protected]
To unsubscribe, change settings or access archives,
see http://fluidproject.org/mailman/listinfo/fluid-work

Reply via email to