出现多个错误时的可访问性

Accessibility in case of multiple errors

我有一个名为 error-component 的 angular 组件。每次服务抛出错误时它都会被初始化。现在,当出现一个错误时,只有屏幕 reader 会读取错误,但如果出现多个错误,屏幕 reader 只会读取一个错误,即最后一个错误。 错误来自服务端。有时服务会抛出多个错误。

<div aria-live="polite" role="alert">
<error-component></error-component>
</div>

所以当有一个错误时,屏幕 reader 会读取它,但如果有多个错误,屏幕 reader 只会读取第一个。

我在回答关于指定 role="alert"aria-live="polite" 的开头时提到了这一点。

Your code sample is specifying conflicting information. Using role="alert" gives you an implicit aria-live="assertive" but you are also specifying aria-live="polite". I would recommend removing role="alert". Having aria-live="polite" is sufficient.

因此,当您为 aria-live 指定两个不同的值时,结果是未知的。假设 aria-live="assertive" 优先, assertive 的 spec 表示:

User agents or assistive technologies MAY choose to clear queued changes when an assertive change occurs.

因此,如果您有多个断言消息,则前一条断言消息 可能 会被下一条断言消息清除。 (这取决于个人辅助技术来决定。例如,JAWS 可能会清除之前的消息,但 NVDA 可能不会。)

如果您将错误消息设为 aria-live="polite",那么您可能 会听到所有消息。这取决于页面何时刷新以及屏幕 reader 缓冲区何时更新。如果您在 <error-component> 中更新消息并且屏幕 reader 缓冲区更新,然后您再次在 <error-component> 中更新消息并且屏幕 reader 缓冲区更新,那么当有用户交互暂停时,应该读取排队的错误消息。但同样,这可能是一个时间问题。

当您收到多条错误消息时,视觉上会发生什么情况?您可以同时看到所有消息,还是短暂地看到一条消息然后被下一条消息覆盖?

如果您创建多个视觉 <error-component> 元素以便您可以同时看到所有消息 AND 您可以将这些组件的容器设为 aria-live ="polite",那么你应该会听到所有的错误。