ARIA 屏幕阅读器实现指南

实时区域

这仅仅是一个指南。实时区域标记是一个复杂的领域,在一定程度上可以自由解释。以下内容旨在提供实现指南,以尊重屏幕阅读器开发人员尝试不同事物的需求。其目的是在提供关于如何使用标记的预期含义的有用指南的同时,支持实时区域作为屏幕阅读器创新和竞争的领域,从而达到平衡。

解释 WAI-ARIA 实时区域标记

  1. 实时更改是提示:通常,实时区域标记由作者提供作为提示,辅助技术可以允许全局、站点甚至区域特定的设置,以及启发式方法来帮助处理没有 WAI-ARIA 提示的页面上的实时更改。
  2. 如果用户配置了第二个硬件通道,则可以选择性地创建第二个、附加的队列:如果有两个呈现通道(例如,文本到语音和盲文显示器),则可以维护两个队列以允许并行呈现。通道可以由用户根据角色或礼貌程度进行配置,用于呈现实时区域。
  3. 忙碌的区域:位于标记为 `aria-busy="true"` 的区域内的任何更改,在清除该属性之前不应添加到队列中。
  4. 礼貌程度(`aria-live` 或来自 角色)优先:项目应根据它们在 `aria-live` 属性中的礼貌程度级别或从 `role` 继承的礼貌程度级别添加到队列中(例如,`role="log"` 默认是礼貌的)。断言性项目优先,然后是礼貌程度级别。或者,实现者可以选择一项策略,清除更礼貌的项目,例如,断言性项目会清除队列中的任何礼貌性项目。
  5. 时间次之:根据事件发生的时间(较早的事件在前)对具有相同礼貌程度级别的项目进行优先排序。按发生顺序呈现具有相同礼貌程度级别的项目。
  6. 原子(`aria-atomic="true"`)区域如果有多个更改,不应重复呈现相同的内容。当原子区域的新事件添加到队列时,删除该区域的先前事件。在呈现原子区域更改之前,可能最好设置一个微小的超时时间,以避免在两个快速连续的更改时重复呈现该区域。
  7. 呈现更改时包含标签:如果更改发生在某种具有语义标签的内容中,请朗读该标签。这对于数据单元格中的更改尤为重要,因为列标题和行标题提供了重要的上下文信息。

设置和启发式方法的想法

  1. 允许使用不同的语音(在文本转语音中)或其他不同的呈现特征来区分实时更改。
  2. 当不存在 WAI-ARIA 标记时,自动呈现某些更改,除非用户将所有实时更改配置为关闭。例如,自动朗读由用户自身输入引起的更改,作为该输入上下文的一部分。
  3. 允许全局设置来关闭实时更改的呈现、呈现所有实时更改、使用标记或设置为“智能”(使用启发式方法)。