Hello Paul, Hello Marcus and hello to listeners of Boagworld. This is the 'Ask the Expert' section and today I'm going to be talking about screen readers.
Now, I don't actually qualify [meant to say classify!] myself as an expert screen reader user simply because I don;t use one on a day-to-day basis, because I'm not forced to; I do have good vision. As such, the way that I would use a screen reader would be different from someone who has to use it on a day-to-day basis. That said, I still think it's useful to demonstrate to people what a screen reader sounds like. And the reason for this is that as far as I am aware on your podcast although you've talked about accessibility a lot and mentioned screen readers I don't believe we've ever had a demonstration of what they actually are like for people when pages are built incorrectly.
So, today I'm going to be showing a few problems using a screen reader. I'm also going to be doing this as a video, so this is a screencast. I understand that at the end of this you will be providing a URL for listeners so that they can access this and view what's happening on screen. Because of course it's all well and good to listen to this stuff but to get the full context it would be good to actually see the video as well. I will try my best to describe what's happening on screen throughout this podcast though.
Now the first example we're going to look at is Amazon dot com. And somewhat cheekily I've brought up the page for my own book on Amazon. And, er, just having a look around at what I can find on the screen and there are some issues there. So, let's have a look at this.
[Screen reader reads out page graphic correctly 'Build your own website the right way using HTML and CSS , Link graphic']
Oh, so that's not too bad. I've just found an image there and it's announced it correctly because it's found a suitable alt attribute but underneath there are a couple of thumbnail images which, if I want to access those, it gives me a whole different ... well, hear for yourself:
[Screen reader announces: 'See larger image, Link' then moves to next link, the thumbnail image and reads an unintelligible string of characters - numbers letters and underscores - out to the listener].
Mmm, doesn't make an awful lot of sense does it? Let's try the next image:
[Screen reader reads out more unintelligible characters and takes almost 8 seconds to read it out]
So, what's happening there? Well, it's quite simple: there's no alt attribute defined for that image and so JAWS tries to fill in the gap and, er ... oh I didn't mention earlier that JAWS is the name of the screen reader that I'm using. So it tries to fill in the gaps because it doesn't have an alt attribute it uses the file name instead and the filename, as is often the case on Amazon, is a right load of old gobbledegook! So it doesn't give it any useful information about that image.
Here's another example of the same thing.
[Screen reader reads out an image gallery as 'thumbs slash zero, thumbs slash one, thumbs slash two' etc]
So this is actually a photo gallery, erm, with a bunch of thumbnail images hence it's reading 'thumbs' because that's the folder where the thumbnail [image] is actually in and it's reading them sequentially as well. It doesn't sound quite as painful as the Amazon example but it still doesn't tell you any useful information about the images on the page.
[Screen reader announces more examples from the same page]
So let's listen to a slightly improved version of that:
[Screen reader announces the same images but with appropriate alt attributes, e.g. 'The Mystery Machine, driven by Scooby' for a photo of a camper van that is painted like the Mystery Machine from the cartoon Scooby Doo]
If we were to look at that on the video I'm showing that page with the style sheet disabled and the alt attributes displaying inline next to the image. As you could hear in the second example it was far more usable - you could actually understand what the image was about (as long as you understood some of the VW terminology used in there), whereas in the first example none of the images actually had alt attributes so it was just trying to read out the location of the file.
So let's look at another example.
[Screen reader announces content of new page 'Page has no links' and then starts reading subsequent page content before I stop it]
What I'm looking at on screen is a page that seems to have a page full of links. But if you were listening carefully to the beginning of that, the screen reader thought otherwise. I'll just try to find that again for you.
[I scrub back in the video clip to find the part where the screen reader says no links]
According to the screen reader the page doesn't have any links. And the reason it thinks that is, well, there *aren't* any links. What's actually happening ... is ... we have a whole bunch of text on the page that is styled using CSS and the behaviour for the link is added using JavaScript. So, we have a <span> element that has an onclick event, location.href='somewhere.html' and that's [the span] wrapped around the text that says 'This is a link - click me'. Um, but of course it's not a link. The screen reader can't find it because it's not an <a href="">, it's something else that's been styled to look like a link and behave like a link. But it's not. Thankfull that's not too common but you have to just be aware that what may look great on screen for you may not be any use to someone using a screen reader. You have to use the right markup for the job.
So, you could have a page that's full of links that say 'click here' but of course that's another problem all in itself. Let's have a listen to that:
[Screen reader reads 'Click here to view' repeatedly as I tab through the links on the page]
Yes, so ... the problem there is that it doesn't give you any information at all. And this is actually still quite common. In fact just yesterday I was looking at Facebook dot com (for my sins) and, er, I was quite shocked to find that they were using a lot of this where the link phrase was 'click here' as opposed to the phrase that you would really want to have, so for example instead of saying 'click here for more information' and having 'click here' as the link phrase you would have 'for more information about our products'. That would be the link phrase. Erm, but if you just use 'click here' and you've got a whole page of links that reads 'click here' this is what you get:
[Screen reader once again reads 'Click here to view' repeatedly as I tab through the links on the page]
Basically, completely unusable.
Now the next example I have is of a form, and in this example, er, the form has been laid out using a table. Thankfully, these days, tables are being used less for layout and people are using CSS for page layouts. However, for forms it's still not uncommon to see someone put a table in there. And, er ...
[screen reader interrupts as page loads]
OK, so in this example what I'm looking at on screen is what appears to be, um, well ... four text inputs, and then there is a radio button and it's basically asking for some personal information, first name, surname, your age, place of birth and then a question 'Do you have a nut alergy', the answers being 'no', 'yes' or 'don't know'. So let's see what the screen reader makes of this.
[screen reader says 'table with two columns and four rows'. I tab to the first input and it reads 'surname/family name - edit']
Already we're hitting a problem. Because the first field that I tab to I can see on screen is *actually* [the one for the] the first name . But the screen reader believed that to be the surname.
So I've now tabbed to the second field which is the surname and it didn't announce anything. So let's tab to the next field:
[screen reader announces field as 'town/city - edit']
Again it's getting it wrong. I've actually tabbed to the field that says 'Age next birthday'
[tab to the next field, screen reader announces 'tab - edit']
And *now* I'm in the 'town/city of birth' field and it hasn't told me anything.
[screen reader announces 'yes - radio button', then 'don't know', reading the radio button choices]
This is all a bit confusing here. OK, so it's asking me the question 'Do I have a nut allergy?'.
[I tab to the next field, screen reader announces 'Yes - radio button - unchecked']
OK, so ... that thinks I'm at the yes radio button but I'm looking at it on screen and it says 'no'. So, what's going on here? Now this is going to be a difficult one to explain on the podcast; this is one of the sections where you really need to see the video. But what's actually happening here is we've got a table to lay out the page and the text sits above the text input, so for example where we're asking for first name, the text that says first name is in the first column and the input that relates to that is in a column underneath, sorry, I mean a table cell underneath it in the next table row. Now the reason this is causing a problem is because if you were to actually linearize that table, in other words look at it in the order of the source code you get a very different view of it. And this is what happens with the screen reader. So if I were to look at this form and read it out in a linear fashion, it goes like this:
First Name [text]
Surname [text]
Form input for First name
Form input for Surname
Age [text]
Town/City of birth [text]
Form input for Age
Form input for Town/City of birth
And so on. The problem is that the screen reader expects the text for that input to appear before that input, and because of the way this has been laid out it really really gets things confused. As I said, this is quite a difficult one to explain on the podcast but if you look at the video clip you'll see why this is causing a problem.
[screen reader blurts a few things out as I try to manipulate it ... poorly]
Sorry about that, that didn't add anything useful at all. Hopefully Paul can edit that out!
OK, so .... the big problem here is that you may be asking a question as we have here that says 'Do you have a nut allergy?' and the answers are 'no', 'yes' and 'don't know'. But if you do put the form elements in the wrong order you're gonna have a problem. And the reason is obviously that with a nut allergy that could be a life or death situation. You could be filling out a form as a blind user and you select what you think is the 'yes' radio button but because the form has been poorly laid out and doesn't have <label> elements that are actually helping to enforce the accessibility you may actually have been selecting the no checkbox [meant to say radio] and it really could be a life or death situation. It may *not* be as bad as that - it could end up with you booking the wrong hotel location or date. So you have to be very careful with the form layout.
OK, one final example. Now everyone's talking about AJAX, it;s the buzzword of the moment. Unfortunately it's also not very good for screen reader users. And the reason for this is that, er, anything that is updated on the page after page load is very very problematic to pass on to the screen readers. now the example I'm going to give here is a fairly simple one, and it's the Google Suggest page. What Google Suggest does is let you type in your search phrase and as you type it's calling back to the server, finding suggestions for you which it then populates in a list underneath the search input. So let's have a listen to that.
[screen reader announces: 'google search - edit, type and text' then reads each letter of search term 'this is a test' as I type]
So I've just typed 'this is a test' and on screen underneath that is a whole bunch of suggestions that it has found. But if I try and actually access any of those using the keyboard:
[screen reader announces 'Google search - edit, Google search - edit, Google search - edit, Google search - edit' with each keypress on the down arrow]
It's actually doing nothing. On screen I can actually see that it's going up and down the options but the screen reader, it's getting nothing back at all, nothing useful at all.
[more screen reader confusion]
Well thankfully with Google Suggest this is something tat you can opt out of - you don't have to use Google Suggest, it's not enforced on you. But it's a very simple example and it just goes to show that a very simple technique like this can be, basically, completely unusable for someone using a screen reader.
So, that was just a few examples. Hopefully you've had an indication of how a poorly built website or web page can affect a user. the bottom line is, keep listening to the podcast, keep doing things right, keep using good markup and, if you can, test your own web pages or web sites using a demo version of JAWS . It really does pay dividends to find out how this works - or doesn't work. So, thank you very much, I hope this has been useful, and I look forward to the next podcast, Paul. Thanks guys.