<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marco's accessibility blog &#187; Search Results  &#187;  easy+aria+tip</title>
	<atom:link href="http://www.marcozehe.de/search/easy+aria+tip/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>http://www.marcozehe.de</link>
	<description>Musings, tips and tricks about the accessible software world</description>
	<lastBuildDate>Tue, 22 Jun 2010 07:26:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Apple&#8217;s iOS 4 supports WAI-ARIA landmarks</title>
		<link>http://www.marcozehe.de/2010/06/22/apples-ios-4-supports-wai-aria-landmarks/</link>
		<comments>http://www.marcozehe.de/2010/06/22/apples-ios-4-supports-wai-aria-landmarks/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 07:26:33 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS4]]></category>
		<category><![CDATA[VoiceOver]]></category>
		<category><![CDATA[WAI-ARIA]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=236</guid>
		<description><![CDATA[This is, I believe, my 100th post on this blog, and I&#8217;m using it to announce that Apple&#8217;s iOS 4, released yesterday for the iPhone and iPod Touch, supports WAI-ARIA landmark in the VoiceOver screen reader. VoiceOver has had, since its inception, a feature called the rotor. The rotor allows users to set a particula [...]]]></description>
			<content:encoded><![CDATA[<p>This is, I believe, my 100th post on this blog, and I&#8217;m using it to announce that Apple&#8217;s iOS 4, released yesterday for the iPhone and iPod Touch, supports WAI-ARIA landmark in the VoiceOver screen reader. VoiceOver has had, since its inception, a feature called the rotor. The rotor allows users to set a particula rweb element by which the one-finger-flick up and down gesture moves in mobile Safari and other apps that use a web display. This feature is now highly customizable. Not only can you enable and disable certain features (for example if you never want to navigate by graphics, you can disable it completely and it won&#8217;t show up in the rotor). But the rotor settings also include a new feature called landmarks. This rotor setting is disabled by default, but can be enabled through the Web settings sub window of the VoiceOver settings. Once enabled, and the user switches to it via the rotor gesture, navigating by WAI-ARIA landmarks on a page works very nicely. The one thing that VoiceOver does not do yet is announce the type of landmark, be it banner, main, search, complementary etc. Furthermore, the landmarks also include what is called automatic web spots in the VoiceOver on Snow Leopard for the Mac. So not only do you jump to the actually marked up landmarks, but a few more spots on a page Apple deems interesting. In my experience, these usually are quite useful spots, too, so this doesn&#8217;t harm the original landmark feature at all.</p>
<p>It is fantastic to see that WAI-ARIA is getting more and more adoption in mainstream products. VoiceOver is available on any iPhone 3G S and iPhone 4, as well as the newest generation iPod Touch models (32 and 64 GB), and the iPad. The iPad does not include the landmarks feature yet, since its iOS hasn&#8217;t been updated to version 4 yet.</p>
<h3>Further reading</h3>
<p><a href="http://www.marcozehe.de/2009/10/31/easy-aria-tip-4-landmarks/">Easy WAI-ARIA tip #4: Landmarks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2010/06/22/apples-ios-4-supports-wai-aria-landmarks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Easy ARIA Tip #5: aria-expanded and aria-controls</title>
		<link>http://www.marcozehe.de/2010/02/10/easy-aria-tip-5-aria-expanded-and-aria-controls/</link>
		<comments>http://www.marcozehe.de/2010/02/10/easy-aria-tip-5-aria-expanded-and-aria-controls/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:02:00 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=218</guid>
		<description><![CDATA[In this Easy ARIA tip, I will give you a bit of a hint on how to make not too complex, but still dynamic, menus accessible. We often encounter menus that pop in and out upon a mouse click or activation of an element using the keyboard. An example can be found at this German [...]]]></description>
			<content:encoded><![CDATA[<p>In this Easy ARIA tip, I will give you a bit of a hint on how to make not too complex, but still dynamic, menus accessible. We often encounter menus that pop in and out upon a mouse click or activation of an element using the keyboard.</p>
<p>An example can be found at <a href="http://grochtdreis.de/weblog/">this German blog</a> site. Look for the &#8220;Archive&#8221; heading, which is a clickable element that shows or hides the archive choices offered by this blog.</p>
<p>Right now,<a href="http://www.nvda-project.org/">NVDA</a> speaks this item as &#8220;clickable&#8221;, so the blind user already gets notified that there is a possibility here to press <kbd>Enter</kbd> on the item and something will happen. Now how cool would it be if, in addition, NVDA would tell me that something will be expanded, or is currently expanded, and I can press <kbd>Enter</kbd> to collapse it?</p>
<p>Fortunately, we have <a href="ttp://www.w3.org/TR/wai-aria/"><acronym title="Web Accessibility Initiative - Accessible Rich Internet Applications">WAI-ARIA</acronym></a> to rescue us from this desire! <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The global attribute <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-expanded"><em>aria-expanded</em></a> is used for exactly this purpose. It takes one of two values: <strong>true</strong> or <strong>false</strong>. true means  a section that this element denotes is currently expanded (visible), false means the expandable section or items is/are currently collapsed (invisible). In the above example, <em>aria-expanded</em> must be defined, and by default set to <strong>false</strong>. In the Javascript that handles the expansion and collapsing of the categories, another code block must be added to touch this attribute and change its value to <strong>true</strong> when the categories are made visible, and back to <strong>false</strong> when they are made invisible. Since there is already JavaScript in place to handle the visibility of the categories, this can be plugged in very easily.</p>
<p>There is one more piece to this: Modern screen readers such as NVDA, <a href="http://live.gnome.org/Orca">Orca</a> or modern versions of the commercial screen readers, can also make use of another attribute that tells which element is actually being affected. In this case, the list of categories. This is done through an attribute called <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-controls"><em>aria-controls</em></a>. The value of this attribute is the ID of the affected element and is set either once or whenever the controlled element changes. In this example, the value would point to the html:ul element with the ID of &#8220;archivliste&#8221;. The attribute gets set on the same element that also gets aria-expanded and does all the magic. Screen readers then know which element is being referenced, by something called Accessible Relations.</p>
<p><strong>In summary</strong>:</p>
<ul>
<li><em>aria-expanded</em> receives a value of &#8220;true&#8221; when the elements in question are visible. It is set to &#8220;false&#8221; when those elements are actually not visible.</li>
<li><em>aria-controls</em> is set to the ID of the top level element that gets made visible or invisible.</li>
</ul>
<p>Both attributes get set on the element that actually does the magic (the same element that has the onclick handler or click/keyboard event listener).</p>
<p>[Update] One word about placement of the expandable items: Ideally, they should be following the item that expands and collapses them, as can be seen in the example above. The list of archive months follows the heading  that has the click handler to expand and collapse it. The result is that screen reader users can expand the items and simply down arrow without having to look for the new content. This makes it feel very natural and efficient.</p>
<p>Also,  some screen readers have intelligent detection of dynamic changes and speak them automatically. This is sort of what WAI-ARIA live regions do, but without the explicit live region markup. The result is that upon expansion, the new items might automatically be spoken, which might be undesirable. For example, this list of months would be very undesirable to be rattled off by the synthesizer whenever the list gets expanded. To prevent this, another attribute can be applied, <em>aria-live</em> with its value set to &#8220;off&#8221;. This prevents supporting screen readers from ever treating this particular region as a live region. This attribute, however, in the example above, would go on the html:ul element, not the element that expands and collapses the list.</p>
<p>Thanks to <a href="accessgarage.wordpress.com">Aaron Leventhal</a> for these two excellent points![/update]</p>
<h3>Previous Easy ARIA Tips</h3>
<ol>
<li><a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">aria-required</a></li>
<li><a href="http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/">aria-labelledby and aria-describedby</a></li>
<li><a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">aria-invalid and role &#8220;alert&#8221;</a></li>
<li><a href="http://www.marcozehe.de/2009/10/31/easy-aria-tip-4-landmarks/">Landmarks</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2010/02/10/easy-aria-tip-5-aria-expanded-and-aria-controls/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Easy ARIA Tip #4: Landmarks</title>
		<link>http://www.marcozehe.de/2009/10/31/easy-aria-tip-4-landmarks/</link>
		<comments>http://www.marcozehe.de/2009/10/31/easy-aria-tip-4-landmarks/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 08:33:01 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=203</guid>
		<description><![CDATA[Yes, they&#8217;re back! This is the fourth Easy ARIA Tip in a trilogy of Easy ARIA Tips. This week, WebAIM published the results of their second screen reader survey. One of the things to note for me was that not many users seem to be aware of a feature in the WAI-ARIA (Accessible Rich Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, they&#8217;re back! This is the fourth Easy ARIA Tip in a trilogy of Easy ARIA Tips. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This week, WebAIM <a href="http://webaim.org/blog/screen-reader-user-survey-results/">published</a> the <a href="http://webaim.org/projects/screenreadersurvey2/">results of their second screen reader survey</a>. One of the things to note for me was that not many users seem to be aware of a feature in the WAI-ARIA (Accessible Rich Internet Applications) specification called <a href="http://www.w3.org/TR/wai-aria/#roleattribute_inherits">landmarks</a>. This article aims to provide an easy to follow guide to implement landmarks in a matter that makes sense, in the hopes that more folks will start using them in their web projects and more screen reader users will take notice and utilize them in their daily surfing experience.</p>
<h3>What the heck are they?</h3>
<p>WAI-ARIA landmarks are a new method of providing easy navigation to certain points or hot spots on a page. Traditionally, this is being accomplished by providing visually hidden &#8220;skip links&#8221; to various anchor points. A commonly encountered one is the &#8220;skip to main content&#8221; or similarly named link that provides a quick way to navigate past all the navigation, search etc. features a site may have, and start reading directly at the main content of a page.</p>
<p>However, as the above cited survey results show, skip links aren&#8217;t nearly as important for most screen reader users as a good heading structure is. Skip links are usually also very useful for keyboard users (who need not necessarily be screen reader users).</p>
<p>However, one of the biggest problems is that &#8220;skip links&#8221; aren&#8217;t consistent. They might be called &#8220;skip to&#8230;&#8221; or &#8220;jump to &#8230;&#8221;, &#8220;skip past &#8230;&#8221; etc., and they may vary in what features they provide. This may also cause complaints for usability. I&#8217;ve been demoed pages that provide 20 or so skip links at the top before an actual link to a site feature is encountered. Needless to say, it didn&#8217;t provide a skip link for the skip links. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>WAI-ARIA attempts to rectify that by standardizing a certain number of navigational anchor points to allow easy and quick access to portions of a page that are frequently needed.</p>
<h3>How are they added?</h3>
<p>Landmarks are added to a page by specifying the <em>role</em> attribute on certain HTML elements. If you view the source of this blog page, for example, and search for the word &#8220;role&#8221;, you&#8217;ll find it added to some HTML elements that start blocks of interest. The addition is very simple, the only thing that really needs to be done is give some thought about placement of the landmarks.</p>
<p>Screen readers such as JAWS version 10 and above, Orca, NVDA from version 2009.1beta and above recognize WAI-ARIA landmarks in Firefox 3.0+ and IE 8. They usually provide one of their quick navigation keys to navigate to each landmark in turn, and JAWS and NVDA also provide lists of landmarks on a page. NVDA even shows the nesting of landmarks.</p>
<h3>The different landmarks</h3>
<p>Below is an explanation of the intention of each landmark from a practical standpoint.</p>
<h4>banner</h4>
<p>The <strong>banner</strong> landmark denotes the portion of a page where a company logo, site slogan or the like would be found. Providing this landmark will allow a screen reader user to easily access that information to, for example, copy the text info to paste somewhere for providing information, correct spelling etc.</p>
<h4>complementary</h4>
<p>the <strong>complementary</strong> landmark denotes a section with complementary information to the main content of the page. For example for a page that shows a single blog post, the complementary information could be links to related articles.</p>
<h4>contentinfo</h4>
<p>The <strong>contentinfo</strong> landmark denotes the section of a page that contains the copyright notice, link to privacy statement etc. It can also be used to denote a section with footnotes, but I&#8217;ve not seen an example of that yet.</p>
<h4>main</h4>
<p>The <strong>main</strong> landmark denotes the section of a page that contains the main content. This is equivalent to the target of a &#8220;skip to main content&#8221; link. On a page showing a single blog post, this is obviously where the title of the post is which starts the article.</p>
<p>Note that it is explicitly stated in the WAI-ARIA spec that this landmark should only appear once in a document. I believe the reason is obvious: If you had more than one main content on a single page, you should split that into two pages. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  All other landmarks can appear more than once (in fact it makes sense for them to do so in some circumstances), but main should only appear once.</p>
<h4>navigation</h4>
<p>The <strong>navigation</strong> landmark denotes one or more sections of a page that contain navigational items. Usually these are links to various features of your site.</p>
<h4>search</h4>
<p>The <strong>search</strong> landmark denotes the section of a page that starts your search feature. This is not necessarily the search textbox itself, but starts usually at the search form level to also include advisory information or the label you might want to include for your search.</p>
<h4>application</h4>
<p>The <strong>application</strong> landmark is a special landmark in that it does not just provide an anchor point but also usually causes different screen reader behavior. The application landmark denotes a section of a page that should not be treated like just any other ordinary web content, but provides features that are more closely related, in concept, to what a desktop application would provide. An example is the Search feature on the Yahoo! pages that provides a very rich experience with widgets not found in standard HTML.</p>
<p>When a screen reader encounters such an application section, what happens is, at least on Windows, that they switch out of their virtual document reading modes into a more interactive mode called &#8220;Focus mode&#8221; or &#8220;forms mode&#8221;. In addition, contrary to normal form elements, they usually prohibit switching back to virtual mode as long as focus is inside the application section. The user is required to interact with whatever keyboard navigation and other feedback (for example through the use of live regions) the web app author provided.</p>
<p>Having said that, the application landmark is usually not found when it comes to providing simple navigation anchors. When the application role is used, you should expect the web author to also have implemented an accessible rich internet application experience and can expect widgets to appear you wouldn&#8217;t find in your standard HTML element. If someone uses the application landmark without providing real rich widgetry, it&#8217;s probably a bug on their part and they&#8217;d most likely appreciate a friendly hint. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Personally, I don&#8217;t consider application to be just another landmark role. For me, application clearly belongs more in the space of true rich internet application development. I just mention it here because it is listed in the same section in the specification.</p>
<h3>What about validation?</h3>
<p>Oh yes, that may be important to some! The current W3C validator doesn&#8217;t validate XHTML+ARIA or HTML+ARIA yet, which includes the landmarks. However, if you don&#8217;t care, or you can convince your client that landmarks are a viable new feature for their sites, Steve Faulkner of The Paciello Group has <a href="http://www.paciellogroup.com/blog/?p=107">worked out a way</a> to validate the landmarks.</p>
<h3>Further reading</h3>
<p>A slightly different <a href="http://www.paciellogroup.com/blog/?p=106">approach to explaining the WAI-ARIA landmarks</a> has been done by Steve Faulkner of The Paciello Group in January of this year.</p>
<h3>Previous Easy ARIA Tips</h3>
<ol>
<li><a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">aria-required</a></li>
<li><a href="http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/">aria-labelledby and aria-describedby</a></li>
<li><a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">aria-invalid and role &#8220;alert&#8221;</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2009/10/31/easy-aria-tip-4-landmarks/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Blind web devs, jump on the Firebug train!</title>
		<link>http://www.marcozehe.de/2009/07/16/blind-web-devs-jump-on-the-firebug-train/</link>
		<comments>http://www.marcozehe.de/2009/07/16/blind-web-devs-jump-on-the-firebug-train/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 14:28:45 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=165</guid>
		<description><![CDATA[Late yesterday, Firebug 1.4 was released. Firebug is the web development and debugging tool for Firefox, with a huge user base worldwide. As JJB mentions in his post, UI accessibility was provided for many of the Firebug features by Hans Hillen of the Paciello Group. The Mozilla Foundation funded the first of this work, and [...]]]></description>
			<content:encoded><![CDATA[<p>Late yesterday, <a href="http://www.getfirebug.com/">Firebug</a> 1.4 was <a href="http://blog.getfirebug.com/?p=295">released</a>. Firebug is <strong>the</strong> web development and debugging tool for Firefox, with a huge user base worldwide.</p>
<p>As JJB mentions in his post, UI accessibility was provided for many of the Firebug features by Hans Hillen of the <a href="http://www.paciellogroup.com/">Paciello Group</a>. The Mozilla Foundation funded the first of this work, and the Mozilla Corporation is now <a href="http://blog.hecker.org/2009/06/30/new-mozilla-accessibility-projects/">continuing funding</a> to finish the remaining UI pieces like the &#8220;Net&#8221; panel, fix remaining issues, and also to work with the University of Illinois to develop Firebug features that will help web developers check their sites and applications for accessibility and fix issues in that area.</p>
<p>I am not going to iterate over the features one by one, since the <a href="http://clients.paciellogroup.com/firebug/firebug.html">documentation</a> on the accessibility features is very comprehensive. I urge all developers wanting to utilize these  features to RTFM (read the fantastic manual) in its entirety before starting to use accessible Firebug.</p>
<p>Once you are up and running with it, you&#8217;ll find that all of the described features work as advertised in the documentation. And even more: The documentation currently still states that the script panel&#8217;s source code viewer cannot be read with NVDA. However, Hans, Jamie from the NVDA team, and I managed to fix that problem shortly before beta 1 of Firebug 1.4. I notified Hans to update the documentation.</p>
<p>Compared to Firebug 1.3, Firebug 1.4 offers a wealth of accessible web development tools. Firebug 1.3 was effectively not accessible, Firebug 1.4 is, with a few small exceptions, fully accessible, which is an almost 100% leap forward within a single version number increment!</p>
<p>This opens up whole new opportunities for blind developers. To my knowledge, the development tools offered by the Redmond browser do not offer this wealth of features. In testing I did while fixing my example form to also work in IE 8, I found the tools to be unreliable and shaky in many areas. Firefox 3.5 and Firebug 1.4, on the other hand, together with NVDA, which currently best supports the former, are a vehicle to open up new job opportunities! With Firebug, a blind person has full control over the styling and layout of a web application or page. For example, taking my example form from the Easy ARIA Tip #3, and looking at the label and input elements for the &#8220;name&#8221; entry, I can immediately be told that the label is to the left of the input, and how many pixels there are between the two. I can make sure they&#8217;re visually at the same height. The box model of the Layout sidepanel of the Firebug HTML panel is fully accessible and gives me a feel for a page I&#8217;ve never had before!</p>
<p>Communication of search results within the HTML panel, or when encountering a breakpoint, is just awesome! Being able to inspect the DOM or a single element&#8217;s properties, being able to in-line edit properties and immediately be able to test the effect a certain ARIA attribute might have on your screen reader output is just productivety at its best!</p>
<p>What Hans accomplished here is done almost entirely through <a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA</a>, and by implementing very intelligent keyboard navigation mechanisms. Through ARIA, such widgets as the log rows for the console, when you enter something such as <code>document;</code>, or  <code>dir();</code>, are pushing the boundaries of known desktop widgets. The fact that tabs have popup menus attached to them is being communicated to the user by NVDA straight away, thanks to a very open and flexible architecture that does not assume certain facts about traditional static desktop widgetry such as &#8220;tabs never have menus attached to them&#8221;. The pure visual box representation of the Layout side panel of the HTML panel is another great example. This even blew David Bolter away when I showed it to him during the Mozilla all-hands in late April, and David is a long-standing and accomplished a11y guru!</p>
<p>Implementing some of these features in desktop applications usually requires very customized implementations of the platform&#8217;s accessibility APIs. ARIA, however, is so open and flexible that it can be easily applied to make such visually complex tools like Firebug accessible without ever touching the Mozilla core codebase. Firebug is a mix of XUL (the Mozilla UI language) and HTML+CSS.</p>
<p>So, <a href="http://twitter.com/vick08/status/2639652258">Victor Tsaran of Yahoo! is already firebugging</a>, and so am I. When are you?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2009/07/16/blind-web-devs-jump-on-the-firebug-train/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>The WAI-ARIA Windows screen reader shootout</title>
		<link>http://www.marcozehe.de/2009/07/01/the-wai-aria-windows-screen-reader-shootout/</link>
		<comments>http://www.marcozehe.de/2009/07/01/the-wai-aria-windows-screen-reader-shootout/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 13:59:51 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=163</guid>
		<description><![CDATA[Firefox 3.5 has been released, and now it&#8217;s time to take a look at what features of WAI-ARIA are being supported by which Windows screen reader. Competition is healthy in this market, and two new screen readers have started supporting Firefox during the 3.5 development cycle: Dolphin&#8217;s Hal/SuperNova and Serotek&#8217;s System Access (including the free [...]]]></description>
			<content:encoded><![CDATA[<p>Firefox 3.5 has been released, and now it&#8217;s time to take a look at what features of WAI-ARIA are being supported by which Windows screen reader. Competition is healthy in this market, and two new screen readers have started supporting Firefox during the 3.5 development cycle: <a href="http://www.dolphinuk.co.uk">Dolphin&#8217;s</a> Hal/SuperNova and <a href="http://www.serotek.com">Serotek&#8217;s</a> System Access (including the free SAToGo offering). So to document the current state of affairs, I&#8217;ve taken each one of the following screen readers running on the Windows platform on a tour through some WAI-ARIA implementations that are out there for everyone to use. I&#8217;ve chosen not to do a widget-by-widget walkthrough of the Dojo DIJIT Toolkit or some other JS library already including WAI-ARIA, but instead concentrated on stuff users will actually encounter while surfing the web under non-clinical conditions.</p>
<p>The following are the candidates:</p>
<ul>
<li><a href="http://www.nvda-project.org">NVDA</a>, using the latest <a href="http://www.nvda-project.org/wiki/Snapshots">snapshot</a> build, which actually does not behave much different from the current 0.6p3 release.</li>
<li><a href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp">JAWS</a> 10.0.1154.</li>
<li><a href="http://www.gwmicro.com/Window-Eyes/">Window-Eyes</a> 7.1.</li>
<li><a href="http://www.dolphinuk.co.uk/productdetail.asp?id=1">SuperNova</a> 11.02.</li>
<li><a href="http://serotek.com/system-access-standalone">System Access</a> in the form of the free <a href="http://www.satogo.com/">System Access To Go</a> service.</li>
</ul>
<p>The scoring is simple: For each important feature that is fully supported, each screen reader gets 1 point. A particular web app may have more than 1 feature, so it is possible to score multiple points for web apps.</p>
<p>Note that, even if WAI-ARIA support is not explicitly documented, it is still possible to score points because Firefox exposes many widgets through MSAA and IAccessible2 that are not standard HTML widgets. The interesting question here is: Are the various forms of Forms/Focus mode flexible enough to deal with these?</p>
<h3>Landmarks</h3>
<p>WAI-ARIA landmarks are one of the most widely used features of the spec already. They allow another means of navigating a web page, finding things such as the banner, main content, search, complementary or footer information. The newly relaunched <a href="http://addons.mozilla.org/">Mozilla Add-Ons website</a> uses them now, as does this blog.</p>
<dl>
<dt>NVDA</dt>
<dd>No.</dd>
<dt>JAWS</dt>
<dd>Yes. Landmarks are announced, they can be navigated to using the <kbd>Semicolon</kbd> quick navigation key, and there&#8217;s a list of landmarks available through <kbd>JAWSKey+Ctrl+SemiColon</kbd>. <strong>1 point</strong></dd>
<dt>Window-Eyes</dt>
<dd>No.</dd>
<dt>SuperNova</dt>
<dd>No.</dd>
<dt>System Access To Go</dt>
<dd>No.</dd>
</dl>
<p>So after the first round, JAWS is in the lead with 1 points.</p>
<h3>Contact form from my Easy ARIA tips</h3>
<p>The <a href="http://www.marco-zehe.de/examples/Tutorial_aria-invalid_and_role_alert.html">example contact form</a> I created for my Easy Aria tip #3 offers several features that can be incorporated without having to create widgets, and which have appeared in some form or another on pages throughout the web already:</p>
<ul>
<li>Does the fact that the Name, E-Mail and Message fields are required get indicated by anything other than the label saying &#8220;required&#8221;?
<ul>
<li>By navigating the virtual buffer</li>
<li>When in forms/focus mode and tabbing around</li>
</ul>
</li>
<li>When entering an invalid name by just entering the first name:
<ul>
<li>Does the alert get spoken when tabbing away?</li>
<li>When tabbing back, does the field get indicated as having an invalid entry?</li>
<li>Does the fact that this field has an invalid entry get indicated when navigating in the virtual buffer?</dd>
</ul>
</li>
</ul>
<p>In total, there are 5 points to score for this test.</p>
<dl>
<dt>NVDA</dt>
<dd>NVDA indicates the field as being required in v cursor mode and when tabbing around. 2 points. It speaks the alert. 1 point. It indicates the invalid attribute both when navigating the virtual buffer and when in focus mode and tabbing around. 2 points. Total: <strong>5 points</strong></dd>
<dt>JAWS</dt>
<dd>While the label gets spoken in virtual cursor mode, when JAWS switches to forms mode automatically when hitting the entry field, the plopping sound drowns out every indication of attributes such as required or invalid. Only when deviating from default settings and turning AutoFormsMode off one will hear those attributes in V cursor mode. No points for these two. The alert gets spoken. 1 point. When tabbing around, the attributes such as required and invalid do get announced with the default settings. 2 points for these. Total: <strong>3 points</strong></dd>
<dt>Window-Eyes</dt>
<dd>The fact that the field is required gets spoken in both browse and focus modes. 2 points. The alert gets spoken. 1 point. The fact that the field has an invalid entry gets spoken in both browse and focus modes. 2 points. Total: <strong>5 points</strong></dd>
<dt>SuperNova</dt>
<dd>None of the asked for features work. Sorry, <strong>0 points</strong>.</dd>
<dt>System Access To Go</dt>
<dd>The alert gets spoken. 1 point. None of the attributes are spoken when navigating or tabbing. Total: <strong>1 point</strong>.</dd>
</dl>
<p>After round 2, NVDA and Window-Eyes take the lead with 5 points each, JAWS follows on third place with a total of 4 points, System Access has 1 point, and SuperNova has 0 points.</p>
<h3> Yahoo! Search</h3>
<p>The new <a href="http://www.ysearch.com">Yahoo! Search</a> is an interactive widget allowing browsing of possible search terms and related concepts that fit the currently selected search term. It uses a whole range of WAI-ARIA widgets, properties and states, live regions etc. When performing a search, the following things should be working:</p>
<ul>
<li>When focusing the textbox:
<ul>
<li>Does the screen reader speak the name &#8220;Search query&#8221;?</li>
<li>Does the screen reader announce the description &#8220;Use the up and down arrow keys to select suggestions, or press down and then right to explore concepts.&#8221;?</li>
</ul>
</li>
<li>When typing, does the screen reader announce that search suggestions are available?</li>
<li>When search suggestions are available, does pressing <kbd>DownArrow</kbd> properly announce that focus shifted to the list of suggested search terms, and what to do to get back to the search field?</li>
<li>Does pressing <kbd>RightArrow</kbd> announce the shift to the &#8220;related concepts&#8221; list and the selected item?</li>
<li>When arrowing through either list, does the highlighted/focused item get spoken, and does the search that will be performed when pressing <kbd>Enter</kbd> get announced by the screen reader?</li>
</ul>
</li>
</ul>
<p>So, there are 7 points to score for this one.</p>
<dl>
<dt>NVDA</dt>
<dd>It speaks the &#8220;Search query&#8221; label. 1 point. It speaks the &#8220;Use the..&#8221; description. 1 point. When search suggestions are available, the fact is announced. 1 point. When pressing <kbd>DownArrow</kbd>, the transition to the list of suggested terms is announced along with the full instructions and the selected item. 1 point. When arrowing left and right to the related concepts and back, each focus transition is properly announced and the highlighted item read. 1 point. When arrowing up and down through either list, the newly highlighted search term is announced, and the search that is going to be performed is announced automatically. 2 points. Total: <strong>7 points</strong></dd>
<dt>JAWS</dt>
<dd>When focusing the search field, the &#8220;Search query&#8221; label is announced. 1 point. The &#8220;use &#8230;&#8221; description is not announced automatically. It is also not being announced when pressing <kbd>JawsKey+Tab</kbd> or <kbd>Insert+F1</kbd>. The only way to get to it is to use their HomeRow utility functions and cycling to the &#8220;Description&#8221; item with <kbd>HomeRow+F10</kbd> and then listening to it with <kbd>HomeRow+F9</kbd>. For this almost non-discoverability I can&#8217;t give a point, sorry. When search results are available, this gets announced. 1 point. When pressing <kbd>DownArrow</kbd>, the transition to the list is announced along with the prompt. 1 point. When RightArrowing, the transition to the &#8220;Explore related concepts&#8221; list is announced. 1 point. When arrowing up and down, the newly highlighted item is not announced, and neither is the search that is going to be performed. One can get the currently focused item by using <kbd>Insert+Tab</kbd>, but the description is once again burried in HomeRow. I&#8217;m willing to give half a point for this one since initially it will be confusing to users that they don&#8217;t hear anything when arrowing up and down. Total: <strong>4.5 points</strong></dd>
<dt>Window-Eyes</dt>
<dd>The label &#8220;Search query&#8221; is announced. 1 point. The &#8220;Use&#8230;&#8221; description is announced. 1 point. The availability of search results is not announced. The transition to the search term suggestions is partially announced: The focused item is, but the prompt is not. Half a point. The transition to the &#8220;Related concepts&#8221; and back is announced partially: The newly focused item is, but the prompt isn&#8217;t. half a point. When arrowing up and down, both the search suggestion and the search that is going to be performed are being announced. 2 points. Total: <strong>5 points</strong>.</dd>
<dt>SuperNova</dt>
<dd>Announcing the &#8220;Search query&#8221; label works. 1 point. But unfortunately, that&#8217;s where the fun ends. The description is not announced, the availability of search term suggestions is neither. And the rest of the functionality of this widget is broken. <kbd>DownArrow</kbd> is captured by SuperNova and will not fall through to the widget, getting one stuck inside the textbox. Tabbing around will only get up to the &#8220;Submit your site&#8221; link, but the search terms aren&#8217;t reachable. SuperNova will say &#8220;bottom&#8221;, and no further can one go. Total: <strong>1 point</strong>.</dd>
<dt>System Access To Go</dt>
<dd>The picture is roughly the same as with SuperNova. The label &#8220;Search query&#8221; is spoken. 1 point. The description is not spoken. The availability of search term suggestions neither. <kbd>DownArrow</kbd> gets you to the &#8220;Search&#8221; button instead of the list of search terms. In fact, this virtual buffer also ends at the &#8220;Submit your site&#8221; link. Total: <strong>1 point</strong>.</dd>
</dl>
<p>At the end of this round, NVDA leaps ahead with 12 points. Window-Eyes is second with 10 points, followed by JAWS with 8.5 points. System Access scores a total of 2, and SuperNova got their first point!</p>
<h3>GMail Chat</h3>
<p>GMail has an integrated Google Talk widget that I talked about <a href="http://www.marcozehe.de/2008/08/06/aria-in-gmail-2-enhancing-the-chat-experience/">before</a>. The following should be working:</p>
<ul>
<li>Ability to activate the &#8220;Set status here&#8221; label by pressing <kbd>Enter</kbd> on it to input a personal status message.</li>
<li>Ability to activate the &#8220;status menu&#8221; and navigate inside it with speech output.</li>
<li>Navigate inside the list of buddies and hear their names and status.</li>
<li>Inside the Chat window, announce typed and incoming messages.</li>
<li>Track going to the Chat window toolbar.</li>
</ul>
<p>Once again, there are 5 points to score. Let&#8217;s see how everyone fares!</p>
<dl>
<dt>NVDA</dt>
<dd>Pressing Enter on &#8220;Set status here&#8221; works fine, and one can input a status message. 1 point. Activating and navigating in the status menu works fine. 1 point. The list of buddies talks fine. 1 point. Chatting works fine. 1 point. Trying to access the toolbar items by first going out of focus mode with <kbd>Escape</kbd> made NVDA hang each time I tried it. It somehow has a conflict with the chat widget. Sorry, no point for this one. Total: <strong>4 points</strong></dd>
<dt>JAWS</dt>
<dd>The label to input a status message is not activable by pressing <kbd>Enter</kbd>. It can only be activated using the JAWS cursor emulation. Since this is a well-known workaround, I&#8217;m giving half a point. The Status menu is activable and works fine. 1 point. The list talks fine. 1 point. The incoming and typed messages are spoken in the chat output. 1 point. The chat toolbar to pop out the chat into its own window is accessible. 1 point. Total: <strong>4.5 points</strong>.</dd>
<dt>Window-Eyes</dt>
<dd>Accessing the label to input a status message works with workaround of routing WE cursor to element, then mouse to WE cursor, and clicking with the mouse. However, I cannot input a status message afterwards, even though I hear the prompt for it. a quarter of a point for that. The status menu cannot be activated through any means. The list talks fine. 1 point. The chat window works with restrictions: It can be activated and typed in, but incoming messages are not read. half a point for that. Trying to access the toolbar items of the chat window sort of works by turning browse mode back on, and then searching, but since the last position is not retained, I can only give half a point for this one. Total: <strong>2.25 points</strong>.</dd>
<dt>SuperNova</dt>
<dd>Activating the &#8220;Set status here&#8221; works. I can input a new status. 1 point. The status menu button does not work, cannot be activated or found through other means. The list of buddies talks. 1 point. Activating a chat with a buddy does not work. Consequently, since the chat window never comes up, the toolbar items for the chat window obsolete themselves. Total: <strong>2 points</strong>.</dd>
<dt>System Access To Go</dt>
<dd>The &#8220;Set status here&#8221; and Status menu items are not accessible. The list talks fine. 1 point. Activating a chat works. 1 point. Finding the toolbar buttons is not possible, because the cursor gets stuck within the textbox of the chat window and there&#8217;s no way to move it out. Total: <strong>2 points</strong>.</dd>
</dl>
<h3>&#8230;and the winner is&#8230;</h3>
<p>Congratulations go to the NV Access team and their screen reader! In this WAI-ARIA shootout, you scored 16 points.</p>
<p>Number 2 is JAWS by Freedom scientific, scoring a total of 12.5 points.</p>
<p>Window-Eyes by GW Micro is third with a total of <strong>12.25 points</strong>.</p>
<p>Fourth place goes to Serotek with their System Access screen reader product line, with a total of <strong>4 points</strong>.</p>
<p>And SuperNova by Dolphin receives <strong>3 points</strong>.</p>
<h3>In summary</h3>
<p>This was a close match, although there is clearly a dividing line between the three screen readers that have been supporting Firefox for a longer period of time, and those that came on board fresh within the past year or so.</p>
<p>I hope this little competition encourages each of the vendors to better themselves for the benefit of the users. We&#8217;re here to help each and everyone of you with technical advice and discussion on how things should be implemented.</p>
<p>Keep on rockin&#8217;!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2009/07/01/the-wai-aria-windows-screen-reader-shootout/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>How to use NVDA and Firefox to test your web pages for accessibility</title>
		<link>http://www.marcozehe.de/articles/how-to-use-nvda-and-firefox-to-test-your-web-pages-for-accessibility/</link>
		<comments>http://www.marcozehe.de/articles/how-to-use-nvda-and-firefox-to-test-your-web-pages-for-accessibility/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 08:50:14 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?page_id=138</guid>
		<description><![CDATA[This article aims to provide a guide to testing your web sites or web applications using both NVDA and Firefox, hoping to provide you with some of the tools available to visually impaired users who will benefit from your sites being accessible. While there are many tools available to check whether your pages are semantically [...]]]></description>
			<content:encoded><![CDATA[<p>This article aims to provide a guide to testing your web sites or web applications using both NVDA and Firefox, hoping to provide you with some of the tools available to visually impaired users who will benefit from your sites being accessible. While there are many tools available to check whether your pages are semantically correct, it is always helpful to also use a real screen reader to hear what your pages would sound like to a blind visitor.</p>
<p><a href="http://www.nvda-project.org">NVDA (Non-visual Desktop Access)</a> is a free and open-source screen reader for the Microsoft Windows operating system. Unlike its commercial counterparts, which have to be purchased to be legally used for testing web sites, NVDA does not cost you any money. Moreover, it is light-weight yet powerful, and can be installed on both physical as well as virtual desktops. Your system won&#8217;t be impaired by it, no video drivers will be installed. If you like, you can even put the portable version onto a USB thumb drive and run NVDA from there, requiring no installation at all.</p>
<h3>How to get NVDA</h3>
<p>NVDA can be downloaded from the <a href="http://www.nvda-project.org">project&#8217;s homepage</a>. Generally, you have two options:</p>
<ul>
<li>Download the release version, which at the time of this writing is 0.6p3. This is a stable release which is suitable for most tasks. However it may not contain the latest updates.</li>
<li>Download a current development snapshot. This may be a bit more unstable, or features may be in flux or temporarily unavailable, but those features that are available are the latest cutting edge. For example, if you want or need to test your web sites with Internet Explorer 8 in addition to Firefox, there&#8217;s no way the current release version, 0.6p3, can do that reliably for you. However, please be aware of <a href="http://www.marcozehe.de/2009/03/31/updated-aria-spiced-form-example-to-work-in-ie-8/">some limitations</a> when testing Accessible Rich Internet Applications (WAI-ARIA) enabled web apps with IE. Also, NVDA&#8217;s support for IE dynamic updates and ARIA support are still heavily under development at this point, so results may not be as good yet because of that.</li>
</ul>
<p>Once downloaded, install it, or put the portable version on a suitable USB thumb drive and insert it.</p>
<h3>First start</h3>
<p>Starting NVDA is easy. The installer offers to run it right after it finishes. Running it from the USB drive is as easy as opening it in Explorer and double clicking the NVDA executable.</p>
<p>On first start, a quick start guide will appear. I encourage you to at least browse it. You can then choose to disable this dialog and click OK. Now, NVDA will sit in your system tray, talking to you through your sound card.</p>
<h3>Visual speech output</h3>
<p>NVDA offers a handy feature for those who cannot, or do not want to, get used to the default voice that ships with it. It comes with a synthesizer that instead of speaking, outputs what it would say into a small window on your screen. To turn this on:</p>
<ol>
<li>Right-click the NVDA icon in your system tray.</li>
<li>Select Preferences -> Synthesizer.</li>
<li>From the drop down, select the <em>Display</em> synthesizer.</li>
<li>Click OK.</li>
<li>If you want to save your changes to make them permanent, right-click the NVDA icon again and select &#8220;Save settings&#8221;.</li>
</ol>
<h3>Opening your first web site and looking at it with NVDA</h3>
<p>Now, it is time to start Firefox and open a web page to make sure you get the proper output.</p>
<p>Once the page loads, NVDA should automatically announce the title. Now, it is time to familiarize yourself with the <a href="http://www.nvda-project.org/blog/Virtual_buffer_Library_code_started">virtual buffer concept</a> common to all Windows screen readers on the market. In a nutshell, what happens is that NVDA takes the HTML of the page and converts it into a flat document with semantic information. Links, headings, form fields, images and other information is being spoken along with the actual text of the page. It is done in the order the HTML appears in the source that Firefox just loaded.</p>
<p>This so-called virtual document is what NVDA presents to you by default. You can use the arrow keys to navigate the document by character or line, and with the <kbd>Ctrl</kbd> key added, also by word. You can even select text using <kbd>Shift</kbd> plus <kbd>arrow</kbd> keys and copy that selected text to the clipboard.</p>
<p>If you encounter an interactive control such as a textbox, combobox or listbox, you can switch to what NVDA calls Focus Mode, in which the virtual buffer reading mode is stopped and focus is set to the control at hand, ready for you to interact with it using the keyboard, as if NVDA was not running at all. You invoke focus mode by pressing <kbd>Enter</kbd> when the virtual caret is on the relevant field. Using <kbd>Escape</kbd>, you switch back to reading inside the virtual document. If you navigate the page with the <kbd>Tab</kbd> key, focus mode will automatically be switched on and off for you.</p>
<p>As you navigate the virtual document, NVDA will update the real browser focus to each focusable element as you hit it with the virtual caret. You will often get visual indication of where you are on the page if you get lost.</p>
<p>As you navigate, NVDA will also speak semantic information such as &#8220;link&#8221;, &#8220;heading level 1&#8243; (through &#8220;heading level 6&#8243;), &#8220;button&#8221; or the like. It will indicate whether you enter or leave lists and how many items these lists have.</p>
<h3>Virtual buffer navigation keys</h3>
<p>While the virtual buffer is active, the following key combinations can be used to perform actions.</p>
<p><strong>Note</strong>:  The <kbd>NVDA</kbd> key is usually the Insert key on the number pad, but can be configured in the Preferences/Keyboard&#8230; settings of the NVDA menu to be the <kbd>CapsLock</kbd> key.</p>
<table border="1">
<caption>General purpose functions</caption>
<tr>
<th><strong>Key</strong></th>
<th><strong>Function</strong></th>
</tr>
<tr>
<td><kbd>NVDA+space</kbd></td>
<td>Turns virtualBuffer pass-through mode on or off.</td>
</tr>
<tr>
<td><kbd>control+NVDA+f</kbd></td>
<td>Find</td>
</tr>
<tr>
<td><kbd>NVDA+f3</kbd></td>
<td>Find next</td>
</tr>
<tr>
<td><kbd>NVDA+f7</kbd></td>
<td>Display a list of all links on the page</td>
</tr>
<tr>
<td><kbd>NVDA+f5</kbd></td>
<td>Refresh the buffer, sometimes needed with dynamic content</td>
</tr>
</table>
<p>The following is a list of quick keys  to move the virtual cursor. These single letter keys can be combined with the <kbd>Shift</kbd> key to perform the same function in the reverse direction.</p>
<table border="1">
<caption>Virtual buffer quick keys</caption>
<tr>
<th><strong>Key</strong></th>
<th><strong>Element</strong></th>
</tr>
<tr>
<td><kbd>h</kbd></td>
<td>heading</td>
</tr>
<tr>
<td><kbd>1</kbd> to <kbd>6</kbd></td>
<td>headings 1 to 6 respectively</td>
</tr>
<tr>
<td><kbd>l</kbd></td>
<td>list (ordered, unordered, definition)</td>
</tr>
<tr>
<td><kbd>i</kbd></td>
<td>list item</td>
</tr>
<tr>
<td><kbd>t</kbd></td>
<td>table</td>
</tr>
<tr>
<td><kbd>k</kbd></td>
<td>link</td>
</tr>
<tr>
<td><kbd>u</kbd></td>
<td>unvisited link</td>
</tr>
<tr>
<td><kbd>v</kbd></td>
<td>visited link</td>
</tr>
<tr>
<td><kbd>f</kbd></td>
<td>form field</td>
</tr>
<tr>
<td><kbd>e</kbd></td>
<td>edit field</td>
</tr>
<tr>
<td><kbd>b</kbd></td>
<td>button</td>
</tr>
<tr>
<td><kbd>x</kbd></td>
<td>checkbox</td>
</tr>
<tr>
<td><kbd>c</kbd></td>
<td>combo box</td>
</tr>
<tr>
<td><kbd>r</kbd></td>
<td>radio button</td>
</tr>
<tr>
<td><kbd>q</kbd></td>
<td>block quote</td>
</tr>
<tr>
<td><kbd>s</kbd></td>
<td>separator</td>
</tr>
<tr>
<td><kbd>m</kbd></td>
<td>frame</td>
</tr>
<tr>
<td><kbd>g</kbd></td>
<td>graphic</td>
</tr>
</table>
<p>So, if you&#8217;re browsing this article with NVDA, pressing <kbd>Ctrl+Home</kbd>, followed by <kbd>t</kbd> once will bring you to the first table, which is the table with the general purpose keystrokes. Pressing <kbd>t</kbd> again will move you to the second table which contains the virtual buffer quick keys.</p>
<h3>Checking for different aspects of your web page</h3>
<p>OK, now that you&#8217;ve made yourself familiar with how NVDA works, it&#8217;s time to load your own web pages and give them a check up. Things that NVDA can help you determine quickly:</p>
<ul>
<li>Do your headings follow a logical structure and substructure? Or did you put everything at one heading level even though something may be a sub section of something else?</li>
<li>Do your form fields like edits and buttons have labels? In other words, does NVDA speak something like &#8220;User name: edit&#8221; automatically, or does it just say &#8220;edit&#8221;? If the latter, your labels aren&#8217;t properly associated with the field they&#8217;re labelling. This is an error in your markup which is easily corrected.</li>
<li>Do your important images have proper alternative text? All images that are part of links, and all images that communicate something important must have alternative text. Otherwise, screen readers cannot pick up the meaning of the image. They will try to guess part of the <em>src</em> attribute as the image name, but this is at most cryptic if not completely useless.</li>
<li>Are things such as navigational links grouped together inside a list of some sort? Putting them in a list helps to add structural information to your pages.</li>
<li>If using <a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA</a>, are you using landmark roles for navigation, search, main, footer etc.? This will aid in identifying specific parts of your page and thus help in navigation/understanding of the layout.</li>
<li>Also if using WAI-ARIA, are your form fields that are required <a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">using the <em>aria-required</em> attribute</a>? Screen readers such as NVDA can use this to give an unambiguous indication that this field is required to be filled in.</li>
</ul>
<p>Of course, there are more things to check than the above, but these are starting points where NVDA can help you assess quickly whether your markup is good.</p>
<h3>Advanced techniques</h3>
<p>NVDA provides a mechanism called Object Navigation. This mode is a walker of the accessible hierarchy exposed by Firefox and other accessible applications. There is a root accessible object usually representing the main window or frame, and as its children, grandchildren and grand-grandchildren etc. are all the objects the UI and the currently loaded web page expose. There are tools such as Microsofts Accessibility Explorer or IBM&#8217;s AccProbe to visualize this, but if you do not have these at hand currently, or want to listen to your tree rather than see it, NVDA offers you the means to do so. </p>
<p>NVDA also provides some default information such as whether the element is actually being displayed (visible), unavailable (grayed out) or other similar info. The following are some basic keystrokes to get you started:</p>
<table border="1">
<caption>Object Navigator basic keystrokes</caption>
<tr>
<th>Key</th>
<th>Description</th>
</tr>
<tr>
<td><kbd>NVDA+NumPad8</kbd></td>
<td>From the current element, go to its parent</td>
</tr>
<tr>
<td><kbd>NVDA+NumPad4</kbd></td>
<td>Go to the previous sibling on the same level as the current object</td>
</tr>
<tr>
<td><kbd>NVDA+NumPad6</kbd></td>
<td>Go to the next sibling of the current object</td>
</tr>
<tr>
<td><kbd>NVDA+NumPad2</kbd></td>
<td>Move to the first child object of the current object</td>
</tr>
</table>
<p>Siblings refer to objects which have a common parent, just like in ordinary family relations.</p>
<p>When navigating your page with this mechanism, you will hear every list, every div (exposed as sections), every form and its formfield children, etc., and can get a feel for how your markup affects the output to the accessibility programming interfaces.</p>
<p>More information on the object navigation is available in both the quick key reference and the NVDA user guide, which were both installed onto your system when you installed NVDA.</p>
<h3>In conclusion</h3>
<p>This article is not meant to replace the NVDA user guide. It is hoped that this article is going to be useful for web developers who want to add one more testing tool to their daily workspace to test the human interaction factor of their web sites.</p>
<p>Having said that, feedback is, of course, very welcome! You can find information on how to contact me on the &#8220;About&#8221; page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/articles/how-to-use-nvda-and-firefox-to-test-your-web-pages-for-accessibility/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Updated ARIA-spiced form example to work in IE 8</title>
		<link>http://www.marcozehe.de/2009/03/31/updated-aria-spiced-form-example-to-work-in-ie-8/</link>
		<comments>http://www.marcozehe.de/2009/03/31/updated-aria-spiced-form-example-to-work-in-ie-8/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 12:53:22 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ARIA InternetExplorer8]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=129</guid>
		<description><![CDATA[I updated my simple form example from the third Easy ARIA Tip to also work in IE 8. I had to explicitly state a doc type to put IE out of quirks mode into proper IE 8 mode, and I also had to change the type attribute&#8217;s value of the script tag to &#8220;text/javascript&#8221; from [...]]]></description>
			<content:encoded><![CDATA[<p>I updated my <a href="http://www.marco-zehe.de/examples/Tutorial_aria-invalid_and_role_alert.html">simple form example</a> from the <a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">third Easy ARIA Tip</a> to also work in IE 8. I had to explicitly state a doc type to put IE out of quirks mode into proper IE 8 mode, and I also had to change the type attribute&#8217;s value of the script tag to &#8220;text/javascript&#8221; from &#8220;application/javascript&#8221; for it to recognize the functions declared in the script block.</p>
<p>The example works visually, but has a number of accessibility issues which make testing IE 8 with it a not so pleasant experience:</p>
<ul>
<li>Neither aria-required nor aria-invalid take any effect with either JAWS or NVDA. It&#8217;s as if the attributes weren&#8217;t set, yet the IE DOM exposes them correctly, as JAWS&#8217;s Element Info keystroke, <kbd>Insert+Shift+F1</kbd>, clearly indicates.</li>
<li>Neither JAWS nor NVDA see the alerts come up, and thus don&#8217;t speak them. The alerts appear visually, so the JavaScript is working, but the DOM mutation is not being picked up. Only after a refresh in the respective screen readers is the content of these visible in the virtual buffer.</li>
</ul>
<p>For testing, I used the latest update to JAWS 10, build number 10.0.1142, and NVDA trunk snapshot 2828. And of course, the release version of IE 8.</p>
<p>For those of you doing web application development and testing, this is an indication that your best bet to get proper results is definitely the combination of a strong implementation of ARIA in Firefox and a supporting screen reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2009/03/31/updated-aria-spiced-form-example-to-work-in-ie-8/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JAWS 10 public beta&#8217;s Firefox 3 support: A review</title>
		<link>http://www.marcozehe.de/2008/08/26/jaws-10-public-betas-firefox-3-support-a-review/</link>
		<comments>http://www.marcozehe.de/2008/08/26/jaws-10-public-betas-firefox-3-support-a-review/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 13:58:56 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=68</guid>
		<description><![CDATA[In the August issue of the &#8220;FS Cast&#8221; podcast, Freedom Scientific announced the soon-to-be expected availability of JAWS 10 public beta. They also demoed many of the new features, like the automatic forms mode switching. They also mentioned that they improved Firefox support a lot and that the web should feel transparent now regardless of [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://www.freedomscientific.com/FSCast/episodes/fscast021-august2008.asp">August issue</a> of the &#8220;FS Cast&#8221; podcast, Freedom Scientific announced the soon-to-be expected availability of JAWS 10 public beta. They also demoed many of the new features, like the automatic forms mode switching. They also mentioned that they improved Firefox support a lot and that the web should feel transparent now regardless of which of the supported browsers the customer would be using: IE or Firefox. <a href="http://developer.mozilla.org/en/Accessible_DHTML">ARIA</a> support, also with an emphasis on live regions, was mentioned, too.</p>
<p>The public beta was <a href="http://www.freedomscientific.com/downloads/jaws/JAWS-public-beta.asp">released</a> on August 25, and I took it for a test ride. Here&#8217;s what I found:</p>
<p>In general, the display of static pages has improved quite significantly over previous versions of JAWS. Especially text being run together with certain HTML constructs is no longer an issue. Missing line breaks are a thing of the past now, too. This makes the over-all reading experience much more pleasant.</p>
<p>One big plus I also noticed is that, when you open a link and then later return from the newly loaded page using <kbd>Alt+LeftArrow</kbd>, JAWS correctly sets the virtual cursor to the link you activated. It used to put the virtual cursor at the top of the page.</p>
<p>The automatic forms mode switching works on textboxes and textareas, but <kbd>Alt+DownArrow</kbd> on a combobox does not pop into forms mode and open the listbox yet, as was demonstrated in the podcast using IE.</p>
<p>Speaking of listboxes: JAWS 10, unlike 9, shows all items in an HTML listbox (a select with size greater 1). It used to only show the selected entry. In IE, it still does that, but in Firefox, it dumps all the items into the virtual buffer. If you have a list of over 100 items, this can become very annoying.</p>
<p>In terms of ARIA support, there are clear signs that work has been done on this front. For one thing, JAWS now honors the ARIA role of &#8220;application&#8221;, which means it does not go into virtual PC cursor mode on such pages or in properly marked-up web application environments. An example can be seen <a href="http://www.mozilla.org/access/dhtml/listbox-owner.htm">here</a>.</p>
<p>Also, live region updates are nicely read on <a href="http://test.cita.uiuc.edu/aria/live/live1.php">this page</a>.</p>
<p>However, there are also still quite some areas where both ARIA support in general and live region support in particular should be improved before final release. Here are some points where I am still seeing problems:</p>
<ul>
<li>While the live region support works great on the above page, it does not work at all in the <a href="https://addons.mozilla.org/en-US/firefox/addon/16">ChatZilla</a> Firefox extension. ChatZilla uses an HTML table with role of &#8220;log&#8221;, and both &#8220;polite&#8221; and &#8220;assertive&#8221; live regions. JAWS currently runs all the text inside this table together in one big string, without line breaks. Also, markup such as links inside these chat output messages is completely ignored. While JAWS 9 didn&#8217;t support live regions yet, it did properly format the output into a very readable form. As a plus: Updates to the view are now automatically picked up, which was not the case in JAWS 9. There, you had to constantly refresh the virtual buffer to see the newest messages.</li>
<li>Live Region support in Google Talk, as I describe in my <a href="http://www.marcozehe.de/2008/08/06/aria-in-gmail-2-enhancing-the-chat-experience/">ARIA in GMail<br />
#2</a> post, is flaky. Sometimes new text that comes in gets spoken, sometimes it doesn&#8217;t. I haven&#8217;t found a consistent pattern yet. Also, the chat window still needs to be popped out into its own window, as also was the case in JAWS 9, to be able to read it at all.</li>
<li>Speaking of Google Talk: The ARIA list of contacts behaves inconsistently with Forms Mode. It has a tendency to unexpectedly pop out of forms mode when you arrow from one list item to another. In addition, <kbd>Enter</kbd> does not yet work to open a chat or new e-mail message, depending on whether the contact is available for a chat or not. Forms Mode is instead turned off, and the virtual cursor lands somewhere unpredictable, preferably at the very bottom of the virtual buffer.</li>
<li>A similar unexpected leaving of forms mode can be observed in this<br />
<a href="http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/tree/test_Tree_v1.html">Dojo treeView test example</a>. Focusing the tree view, turning on forms mode, and arrowing among the items, opening and closing them works in the downward direction. However, as soon as I go from &#8220;Africa&#8221; back up to the root element &#8220;Continents&#8221;, forms mode is popped off.</li>
<li>One other problem I discovered was that alert messages have a tendency to get out of sync. I was trying out my example from <a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">Easy ARIA tip #3</a>. I called up that page directly after I had started Firefox. Upon launch of Firefox, <a href="http://www.webvisum.com/">WebVisum</a> told me that I was now logged in, via an alert. When I then triggered my first alert from the sample page, the &#8220;You are now logged into WebVisum&#8221; message was repeated. Consequently, all subsequent triggers of alerts would then speak the previous alert message instead of the current one.</li>
</ul>
<p>In summary, there are clear advancements visible in JAWS 10 with regards to support of Firefox 3. Especially the more readable flow of text and the fact that you always return to the same spot when going back a page are big plus points. However, while there are also advancements visible in the ARIA and live region support, for a public beta after as long a development cycle as was mentioned in the podcast, I would have expected a much more polished first beta.</p>
<p>Having said that, it must not be forgotten that this is still beta software. All above issues were reported to Freedom Scientific prior to publishing this blog post, and the Mozilla accessibility team will work with the developers at FS to resolve these issues.</p>
<p>For the next public beta release of JAWS 10, I am planning an ARIA shootout among all screen readers across all platforms that support ARIA already. So stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/08/26/jaws-10-public-betas-firefox-3-support-a-review/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ARIA in Gmail #1: Alerts</title>
		<link>http://www.marcozehe.de/2008/08/04/aria-in-gmail-1-alerts/</link>
		<comments>http://www.marcozehe.de/2008/08/04/aria-in-gmail-1-alerts/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 13:45:40 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[GMail]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=53</guid>
		<description><![CDATA[Google have recently started to put ARIA (Accessible Rich Internet Applications) into GMail. This means that ARIA is now getting a lot more exposure than it used to, with GMail being probably one of the most widely used web applications today. It&#8217;s great to see that the hard work Mozilla, IBM, the W3C and especially [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com">Google</a> have recently started to put <a href="http://developer.mozilla.org/en/docs/Accessible_DHTML">ARIA (Accessible Rich Internet Applications)</a> into <a href="http://mail.google.com">GMail</a>. This means that ARIA is now getting a lot more exposure than it used to, with GMail being probably one of the most widely used web applications today. It&#8217;s great to see that the hard work Mozilla, IBM, the W3C and especially <a href="http://accessgarage.wordpress.com/">Aaron Leventhal</a> put into this standard recommendation is getting this prominent placement so soon!</p>
<p>As an appreciation for the work devs at Google such as Srinivas Annam are doing to provide better access to GMail, this post starts a series of articles on the subject of putting ARIA into GMail, either after I&#8217;ve been pointed to specific areas or by finding new features myself.</p>
<p>The first in this series of reviews of GMail ARIA features concerns a very simple, yet effective, one: Alerts. As I already mentioned in my <a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">Easy ARIA Tip #3</a>, alerts are a great way to immediately notify users about important status updates, but without taking focus away from where you are currently working.</p>
<p>As I found out rather by accident, GMail now uses an ARIA landmark role of &#8220;alert&#8221; for the piece of the UI that pops up with an important status message for a few seconds after certain actions have been performed. It disappears again after a few seconds, but because this is an alert, screen readers pick it up and speak it automatically as soon as it appears. Alerts, in the assistive technology terminology, are important status messages that can pop up anywhere on the screen and should be spoken or otherwise indicated to the user immediately. Another example of an alert is the notification box that appears when Firefox asks the user whether they want to remember the password just entered. It is an important notification the user might want to act upon, but still less intrusive than a modal dialog.</p>
<p>Actions that cause this alert to appear are such ones as moving a contact from the &#8220;Recommended contacts&#8221; to &#8220;My Contacts&#8221;, deleting a label, sending an invitation to someone for Google Talk/Chat, adding a contact, etc.</p>
<p>This way, actions that previously used to only pop up a message now provide immediate feedback. There is no need to look for the message, and when one finds it, find out that it just disappeared after the timeout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/08/04/aria-in-gmail-1-alerts/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Easy ARIA tip #3: aria-invalid and role &#8220;alert&#8221;</title>
		<link>http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/</link>
		<comments>http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 12:42:11 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/?p=42</guid>
		<description><![CDATA[I know, I know, it&#8217;s been a while since I posted my last Easy ARIA tip. But I&#8217;m hoping that this one will find you all excited and willing to play with it some more! The problem: You have a form, a contact form, for example, that you want to put some accessible error checking [...]]]></description>
			<content:encoded><![CDATA[<p>I know, I know, it&#8217;s been a while since I posted my last Easy ARIA tip. But I&#8217;m hoping that this one will find you all excited and willing to play with it some more!</p>
<p>The problem: You have a form, a contact form, for example, that you want to put some accessible error checking into. Common problems are e-mail addresses that are not valid, or a name that does not contain at least a first and a surname.</p>
<h3>The form</h3>
<p>Let&#8217;s start out with a simple form.</p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Contact form&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form method="post" action="post.php"&gt;
&lt;fieldset&gt;&lt;legend&gt;Please enter your contact details&lt;/legend&gt;
&lt;label for="name"&gt;Your name (required):&lt;/label&gt;
&lt;input name="name" id="name" aria-required="true"/&gt;&lt;br /&gt;
&lt;label for="email"&gt;E-Mail address (required):&lt;/label&gt;
&lt;input name="email" id="email" aria-required="true"/&gt;&lt;br /&gt;
&lt;label for="website"&gt;Website (optional):&lt;/label&gt;
&lt;input name="website" id="website"/&gt;
&lt;/fieldset&gt;
&lt;label for="message"&gt;Please enter your message (required):&lt;/label&gt;&lt;br /&gt;
&lt;textarea name="message" id="message" rows="5" cols="80" aria-required="true"&gt;&lt;/textarea&gt;&lt;br /&gt;
&lt;input type="submit" name="submit" value="Send message"/&gt;
&lt;input type="reset" name="reset" value="Reset form"/&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Straight and simple, but we&#8217;re not here to win beauty prices anyway. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Checking for validity and notifying the user</h3>
<p>Checking the validity and notifying the user consists of several steps:</p>
<ol>
<li>Checking if the e-mail address or entered name are valid. To keep it simple, we&#8217;ll check whether the e-mail address contains the &#8220;@&#8221; symbol, and if the name entry contains at least 1 space characters &#8221; &#8220;.</li>
<li>Setting the field&#8217;s <em>aria-invalid</em> attribute and giving it a value of &#8220;true&#8221;.</li>
<li>Notifying the user via an alert that the value entered was incorrect. Instead of using an intrusive dialog box created by the JavaScript &#8216;alert&#8217; function, we&#8217;ll use a simple WAI-ARIA widget to do it. This notifies the user, but lets them continue interacting with the form without any interruptions.</li>
</ol>
<p>All of this happens when the input loses focus, meaning in the &#8220;onblur&#8221; handler.</p>
<p>The JavaScript code I wrote looks like this, inserted above the closing &#8220;head&#8221; tag:</p>
<pre>
&lt;script type="application/javascript"&gt;
<code>
  function removeOldAlert()
  {
    var oldAlert = document.getElementById("alert");
    if (oldAlert)
      document.body.removeChild(oldAlert);
  }

  function addAlert(aMsg)
  {
    removeOldAlert();
    var newAlert = document.createElement("div");
    newAlert.setAttribute("role", "alert");
    newAlert.setAttribute("id", "alert");
    var msg = document.createTextNode(aMsg);
    newAlert.appendChild(msg);
    document.body.appendChild(newAlert);
  }

  function checkValidity(aID, aSearchTerm, aMsg)
  {
    var elem = document.getElementById(aID);
    var invalid = (elem.value.indexOf(aSearchTerm) < 0);
    if (invalid) {
      elem.setAttribute("aria-invalid", "true");
      addAlert(aMsg);
    } else {
      elem.setAttribute("aria-invalid", "false");
      removeOldAlert();
    }
  }
</code>
&lt;/script&gt;
</pre>
<h4>The checkValidity function</h4>
<p>The core is the checkValidity function. It takes three parameters: The ID of the input that is to be validated, the term to search for to ensure validity, and the error message to be inserted into the alert.</p>
<p>To see if it is valid, the function checks whether the indexOf the input's value is anything greater than -1. A value of -1 or less is returned if the index of the search term could not be found within the value.</p>
<p>If invalid, the function does two things:</p>
<ol>
<li>It sets the element's <em>aria-invalid</em> attribute to "true", which will indicate to screen readers that there is invalid content in here.</li>
<li>It will call the addAlert function to add the alert with the provided error message.</li>
</ol>
<p>If the search term is found, the <em>aria-invalid</em> attribute is reset to "true". In addition, any alert that still might be around is removed.</p>
<h4>The addAlert function</h4>
<p>This function first removes any old alerts. The function is simple: It looks for an element with id "alert", and if found, removes that from the document object model.</p>
<p>Next, the function creates a div element to hold the alert text. It gets an ID of "alert". And it gets a role set of "alert". This is actually ARIA-inspired, even though it doesn't say "aria" in the attribute name. The reason is that <em>role</em> is based on the XHTML role attribute module that was simply ported to HTML for simplicity.</p>
<p>The text is added to the div element, and the div element is added to the document.</p>
<p>The moment this happens, Firefox will fire an "alert" event to assistive technologies when this div appears. Most screen readers will pick this one up automatically and speak it. This is similar to the Notification Bar in Firefox that prompts you whether you want to save a password. Our one does not have any buttons to press, it just tells us what's wrong.</p>
<h3>Adding the magic to the "onblur" event</h3>
<p>All that's left now is add the event handler. We need to change the two inputs for e-mail and name for this:</p>
<pre>
&lt;input name="name" id="name" aria-required="true" onblur="checkValidity('name', ' ', 'Invalid name entered!');"/&gt;&lt;br /&gt;
&lt;input name="email" id="email" aria-required="true" onblur="checkValidity('email', '@', 'Invalid e-mail address');"/&gt;&lt;br /&gt;
</pre>
<h3>Testing the example</h3>
<p>I've put up the above as an <a href="http://www.marco-zehe.de/examples/Tutorial_aria-invalid_and_role_alert.html">static example page</a> for you to try it out. If you use Firefox 3 and a current supported screen reader, try the following:</p>
<ol>
<li>Enter only your first name as the name. When tabbing, you'll hear an alert that tells you you've entered an invalid name. You can then shift-tab back and correct the error.</li>
<li>Enter an e-mail address that has no "@" symbol. When tabbing out of this field, you should hear a warning that says you didn't enter a valid e-mail address.</li>
</ol>
<p>In both cases, when returning focus to the field in question, your screen reader should tell you that this field is invalid. JAWS 9 supports this, but JAWS 8 does not, so this may not work in all versions of the screen readers supported.</p>
<h3>A few questions that you might have</h3>
<dl>
<dt>Why did you put both "(required)" in the label text and the <em>aria-required</em> attribute on some of the inputs?</dt>
<dd>Because if this were a real live form, and the site was being visited by a browser that does not yet support ARIA, we'd still want to give an indication that this is a required field.</dd>
<dt>Why don't you set focus back to the invalid field automatically?</dt>
<dd>Because this is not allowed by at least the Windows API specs and possibly others. Also, letting the focus jump around without real user interaction too often is not a nice thing to do in general.</dd>
</dl>
<h3>In conclusion</h3>
<p>Personally, it is my hope that websites would include such techniques more often in the future when filling out forms. There's nothing more frustrating than filling out a form with 20 or so fields, submitting it, only to find that field 3 was invalid, and having to go through all fields again to make sure the values were retained, or supplying some information redundantly.</p>
<p>This is one of those examples where, in my opinion, more direct accessibility and user-friendliness can be achieved by explicitly using some JavaScript in combination with ARIA.</p>
<p>I hope you found this little tutorial of some use! I'd welcome your feedback as always!</p>
<p>And of course, you're welcome to enhance this little example as a "homework" to also check whether something valid was entered for the "message" textarea.</p>
<h5>Previous Easy ARIA tips</h5>
<ol>
<li><a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">aria-required</a></li>
<li><a href="http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/">aria-labelledby and aria-describedby</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>A follow up to my Easy ARIA tip #2</title>
		<link>http://www.marcozehe.de/2008/03/25/a-follow-up-to-my-easy-aria-tip-2/</link>
		<comments>http://www.marcozehe.de/2008/03/25/a-follow-up-to-my-easy-aria-tip-2/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 10:55:27 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/2008/03/25/a-follow-up-to-my-easy-aria-tip-2/</guid>
		<description><![CDATA[Community member Ben Millard has pointed out in a recent blog post that roughly the same as shown in my example can be achieved using regular HTML 4 by embedding the input into the label. Thanks for that info, Ben! It is very useful and shows that some of the techniques that have been available [...]]]></description>
			<content:encoded><![CDATA[<p>Community member Ben Millard has <a href="http://projectcerbera.com/blog/2008/03#day24">pointed out in a recent blog post</a> that roughly the same as shown in my example can be achieved using regular HTML 4 by embedding the input into the label. Thanks for that info, Ben! It is very useful and shows that some of the techniques that have been available for years escape even us gurus sometimes. But then, we don&#8217;t dig through every W3C doc on a regular basis, either.</p>
<p>However, the implementers of Firefox accessibility have done their homework: Ben&#8217;s examples work nicely with Firefox 3. The association is made properly, the label accessible is built up fine, and the input accessible gets its accessible name defined correctly. I also tested with that other browser that came with my Windows XP, and users there are less fortunate: IE does not properly make up the accessible name for the label and also does not correctly associate the accName of the input type with the label&#8217;s full content.</p>
<p>So, does Ben&#8217;s example now completely obsolete the need for the <strong>aria-labelledby</strong> and <strong>aria-describedby</strong> attributes? Most definitely not! There may always be cases where nesting the input into the label is impractical/not wanted, or where the description cannot be so nicely densed into the label as Ben shows using my example. For those cases where you explicitly need to specify something to become the accDescription, you definitely can still use ARIA. You can even use <strong>aria-describedby</strong> inside an input that&#8217;s nested within a label. <img src='http://www.marcozehe.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/03/25/a-follow-up-to-my-easy-aria-tip-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Easy ARIA tip #2: aria-labelledby and aria-describedby</title>
		<link>http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/</link>
		<comments>http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 20:29:46 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[aria-describedby]]></category>
		<category><![CDATA[aria-labelledby]]></category>
		<category><![CDATA[attribute]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/</guid>
		<description><![CDATA[Sorry it took me so long to get back to it, but here it is, my second tip on the usage of some easy ARIA markup to make your sites more accessible. Imagine this: You have a form where you ask your user a question, but the answer is actually part of the sentence the [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry it took me so long to get back to it, but here it is, my second tip on the usage of some easy ARIA markup to make your sites more accessible.</p>
<p>Imagine this: You have a form where you ask your user a question, but the answer is actually part of the sentence the question is made of. A classic example we all know from our browser settings is the setting &#8220;Delete history after x days&#8221;. &#8220;Delete history after&#8221; is to the left of the textbox, x is the number, for example 21, and the word &#8220;days&#8221; follows the textbox, actually forming a sentence that is easy to understand.</p>
<p>If you&#8217;re using a screen reader, have you noticed that, when you go to this setting in Firefox, it actually tells you &#8220;Delete history after 21 days&#8221;?, followed by the announcement that you&#8217;re in a textbox, and that it contains the number 21. Isn&#8217;t that cool? You do not need to navigate around to find out the unit. &#8220;Days&#8221; could easily be &#8220;months&#8221; or &#8220;years&#8221;, and in many ordinary dialogs, there is no way to find this out other than navigating around with screen reviewing commands.</p>
<p>Well, we have to thank Aaron and all the other great people who invented ARIA, for this capability! The solution is in an ARIA attribute called <strong>aria-labelledby</strong>. Its parameter is a string that consists of the IDs of the HTML or XUL elements you want to concatenate into a single accessible name. Yes, you read right, this not only works in HTML, but in XUL, too!</p>
<p>A second attribute that works very similarly is called <strong>aria-describedby</strong>. It can also take IDs of one or more elements to make up an additional description. In Microsoft Active Accessibility, this is converted into the AccDescription of the element. Some screen readers like NVDA pick this description up and speak it automatically after the name and type of the control, assuming that this information is giving the visually impaired user additional information that a sighted user also gets.</p>
<p><strong>aria-labelledby</strong> and <strong>aria-describedby</strong> are both specified within the element that is to be labelled, for example an html:input or a xul:textbox. In both cases, the <strong>label for</strong>/<strong>label control</strong> bindings that may also exist, are overridden by <strong>aria-labelledby</strong>. If on an HTML page you provide <strong>aria-labelledby</strong>, you should also provide a <strong>label for</strong> construct to also support older browsers that do not have ARIA support yet. With Firefox 3, your blind users will automatically get the better accessibility of the new attribute, but the users of older browsers are not left in the dark this way.</p>
<p>And here is an example I made up for demonstration purposes:</p>
<p><code></p>
<form method="post.php">
<div>
<span id="labelShutdown"><label for="shutdownTime">Shut down computer after</label></span></p>
<input id="shutdownTime" type="text" value="10" aria-labelledby="labelShutdown shutdownTime shutdownUnit" aria-describedby="shutdownDescriptor"/>
<span id="shutdownUnit"> minutes</span>
</div>
<div id="shutdownDescriptor">Allows you to specify the number of minutes of inactivity after which your computer should shut down.</div>
</form>
<p></code></p>
<h3>A Note for JAWS 8 users</h3>
<p>JAWS 8.0 has its own logic to find labels, causing it to always override the accessibleName the textbox of an HTML document gets. With JAWS 8, I have not found a way to get it to accept the label from the example above. But NVDA and Window-Eyes do it just fine, and Orca on Linux also has no problems.</p>
<h5>Previous Easy ARIA tips</h5>
<ol>
<li><a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">aria-required</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Easy ARIA Tip #1: Using aria-required</title>
		<link>http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/</link>
		<comments>http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 11:19:30 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[ARIA]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[aria-required]]></category>
		<category><![CDATA[attributes]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/</guid>
		<description><![CDATA[Inspired by a conversation I had with Aaron the other day, I&#8217;m starting a mini series about easy accessibility improvements you can accomplish using ARIA, but which do not require you to implement a whole widget. Some ARIA attributes also work on plain old standard HTML elements and can easily improve accessibility within supported browsers [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by a conversation I had with Aaron the other day, I&#8217;m starting a mini series about easy accessibility improvements you can accomplish using ARIA, but which do not require you to implement a whole widget. Some ARIA attributes also work on plain old standard HTML elements and can easily improve accessibility within supported browsers and screen readers. On browsers that do not support these attributes (yet), they are ignored and do not break your page just because that attribute is there.</p>
<p>The first attribute I&#8217;d like to cover is called aria-required. It is one of the universal aria attributes, which means, as stated, that it can be used on any conventional HTML element such as input or select.</p>
<p>Let&#8217;s look at this sample excerpt:<br />
<code><br />
<form action="post">
<label for="firstName">First name:</label></p>
<input id="firstName" type="text" aria-required="true" />
<label for="lastName">Last name:</label></p>
<input id="lastName" type="text" aria-required="true" />
<label for="streetAddress">Street address:</label></p>
<input id="streetAddress" type="text" />
</form>
<p></code><br />
In this excerpt, both the firstName and lastName input elements have the aria-required attribute set. Note that in normal scenarios, you&#8217;d also stype them or their label differently, or put an asterisk &#8220;*&#8221; after the label.<br />
However, if you cannot or do not want to put an asterisk on the label, but only style it with bold text or the like, screen readers usually cannot pick up the information automatically that this is a required field. If you use the aria-required attribute as shown above, modern screen readers will indicate that this is a required field automatically, if used together with Firefox 3.<br />
Screen readers that already support this feature are NVDA, JAWS 9.0, and Window-Eyes 5.5 or higher. JAWS 8 does not support this attribute yet. Also, ORCA does not seem to pick this attribute up yet, at least my testing showed that Orca did not indicate the required state to me when tabbing through that form.</p>
<p>On the browser side, Opera 9.5 is going to include ARIA support, so this technique is not limited to Firefox. Also, as this technology spreads, more browsers will pick up on it, and your sites will automatically be compatible and more accessible once these other browsers also support ARIA.</p>
<p>This is the first of a couple of examples that demonstrates how easily you can use ARIA without implementing a whole widget to improve accessibility on your web sites. Start using it today, and you&#8217;ll make sure that you help insure good accessibility for people using modern browsers and screen readers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>
