WAI-ARIA Screen reader compatibility
Shows how different WAI-ARIA attributes behave in commonly used screen readers.
The results include two types of test:
- Expected to work - these tests show support when accessibility features are used correctly
- Expected to fail - these tests show what happens when accessibility features are used incorrectly (marked with
)
ARIA support by user agent
ARIA role and attribute support in different screen reader / browser combinations.
Expected failures (marked with ) are not included in the reliability graph.
The solid area in the graph shows percentage of tests that pass in all tested interaction modes. The cross hatched area shows partial passes that only work in some interaction modes.
An example of a partial pass is when form labels are read when tabbing, but ignored in browse mode.
Combo | Versions | Reliability | Test Changes |
---|---|---|---|
JAWS Chrome | JAWS 2024.2409.2 with Chrome 131 | ||
JAWS Edge | JAWS 2024.2409.2 with Edge 131 | ||
JAWS Firefox | JAWS 2024.2409.2 with FF 128 | 10 better | |
JAWS IE | JAWS 2019.1912.1 with IE11 | 15 better | |
NVDA Chrome | NVDA 2024.4 with Chrome 131 | 1 better | |
NVDA Edge | NVDA 2024.4 with Edge 131 | 4 better | |
NVDA Firefox | NVDA 2024.4 with FF 128 | 13 better | |
NVDA IE | NVDA 2019.2 with IE11 | 5 better | |
VoiceOver Mac | VoiceOver macOS 14.6 with Safari 17.6 | 13 better | |
VoiceOver iOS | VoiceOver iOS 17.7 with Safari iOS 17.7 | 10 better | |
WindowEyes IE | WindowEyes 9.2 with IE11 | 10 better 1 worse | |
Dolphin IE | Dolphin SR 15.05 with IE11 | ||
SaToGo IE | SaToGo 3.4.96.0 with IE11 | ||
Average | Including older versions |
The average includes all versions, but some browser/AT combinations have tests for multiple versions (NVDA / JAWS / VoiceOver), while others only have tests for a single version (SaToGo and Dolphin).
ARIA support trend
This graph shows reliability over time for ARIA in NVDA, JAWS and Voiceover. Other screen readers don't have enough historical data yet to plot trends.
ARIA roles
columnheader
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (30% average) | 0% | 0% | 0% | 40% | 69% | 57% | 9% | 9% |
![]() role=columnheader headers but no th | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
grid
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (81% average) | 100% | 100% | 100% | 100% | 85% | 100% | 91% | 9% |
![]() role=grid | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
heading
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (94% average) | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
![]() role=heading | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
note
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
![]() role=note | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
presentation
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (90% average) | 100% | 100% | 100% | 63% | 100% | 67% | 100% | 87% |
![]() iframe with role=presentation and aria-label attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() iframe with role=presentation and title attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() iframe with role=presentation and no accessible name | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=presentation | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=presentation | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() iframe with role=presentation and negative tabindex and no accessible name | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input with aria-labelledby pointing to role=presentation element | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
row
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (30% average) | 0% | 0% | 0% | 40% | 69% | 57% | 9% | 9% |
![]() role=columnheader headers but no th | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
rowgroup
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (30% average) | 0% | 0% | 0% | 40% | 69% | 57% | 9% | 9% |
![]() role=columnheader headers but no th | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
table
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (96% average) | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 67% |
![]() role=table | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
ARIA attributes
aria-describedby
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (93% average) | 100% | 100% | 100% | 100% | 94% | 100% | 82% | 100% |
![]() aria-describedby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input type=text with aria-describedby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() img with aria-describedby | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
aria-label
aria-labelledby
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (70% average) | 84% | 82% | 81% | 81% | 61% | 83% | 71% | 67% |
![]() aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() applet with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() area with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() audio with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() button containing img with aria-labelledby | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() embed with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() img with aria-labelledby | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input type=image with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input type=text with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() object with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() video with aria-labelledby attribute | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() aria-labelledby containing img with no alt | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() img with null alt and non-null aria-labelledby attributes | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input with aria-labelledby pointing to role=presentation element | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
aria-level
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (94% average) | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
![]() role=heading | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
role
Screen Reader | NVDA | JAWS | VoiceOver | |||||
---|---|---|---|---|---|---|---|---|
Browser | Edge | FF | Cr | Edge | FF | Cr | Mac | iOS |
Reliability when used correctly (77% average) | 83% | 79% | 81% | 79% | 90% | 84% | 78% | 53% |
![]() role=heading | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=columnheader headers but no th | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=grid | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=table | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() iframe with role=presentation and no accessible name | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=presentation | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=note | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() role=presentation | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() input with aria-labelledby pointing to role=presentation element | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Key
Tests expected to fail (due to authoring errors) are marked with .
Works in 100% of tested screen readers
Fails in 1% - 25% of tested screen readers
Fails in 26% - 50% of tested screen readers
Fails in 51% - 75% of tested screen readers
Fails in 76% - 100% of tested screen readers
Stable - works, or doesn't cause problems, in all versions of a specific combination of screen reader and browser
Better - works, or doesn't cause problems, in the most recent version of a specific combination of screen reader and browser (improvement)
Worse - causes problems in the most recent version of a specific combination of screen reader and browser, but used to work in older versions (regression)
Broken - causes problems in all versions of a specific combination of screen reader and browser
Test notes
All tests were carried out with screen reader factory settings. JAWS in particular has a wide variety of settings controlling exactly what gets spoken.
Screen readers allow users to interact in different modes, and can produce very different results in each mode. The modes used in these tests are:
- Reading Content read using the “read next” command in a screen reader
- Tabbing Content read using the “tab” key in a screen reader
- Heading Content read using the “next heading” key in a screen reader
- Touch Content read when touching an area of screen on a mobile device
In the “What the user hears” column:
- Commas represent short pauses in screen reader voicing
- Full Stops represent places where voicing stops, and the “read next” or “tab” or “next heading” command is pressed again
- Ellipsis … represent a long pause in voicing
- (Brackets) represent voicing that requires a keystroke to hear