load/form 页面上的旁白未读取断言的 aria-live 区域提交

Assertive aria-live region not read by Voice Over on page load/form submit

我在 role="alert" 上有一个 aria-live 区域,其值 "assertive" 没有在提交表单时使用。 PHP当时也在写,就像页面加载一样。

它在 PC 上的 NVDA 中运行良好,但在 Mac 上什么也说不出来。我发誓我以前测试过这个并且经常使用这个技术。

知道为什么没有人说它吗?

div 看起来像这样:

<div class="alert alert-danger" role="alert" aria-live="assertive">Error: please fix the indicated fields:</div>

role=alertaria-live="assertive" 实际上是相同的(警报意味着自信),尽管这本身不会引起问题。

可能需要用PHP输出标记,然后用JS给它加上role="alert"属性,触发它说话,等页面加载完成。

已知在页面加载时直接读取 ARIA 实时区域不起作用,或者对于屏幕 readers + 浏览器的某些组合并不总是可靠。 这是事实:你无能为力。

当新的实时区域添加到 DOM 或更新现有实时区域的文本内容时,将读取 ARIA 实时区域。 这适用于几乎所有屏幕 readers + 浏览器的组合。 但是,对于页面加载时存在的实时区域,没有明确指定是否必须读取它们;所以,这取决于屏幕 reader 和浏览器。

了解这一点后,您可以在页面加载后不久通过执行上述两件事之一来触发读取:

  • 使新的直播区域出现在 DOM
  • 更改现有活动区域的文本

请注意,如果您 add/change 角色 and/or 现有元素的 aria-live 属性,它将不起作用。元素必须是新元素或其文本必须有效更改。

aria-live 属性实质上将 dom 元素标记为将接收更改的内容,并且应将这些更改传达给用户。

role="alert" 属性实现了类似的通知,但各种屏幕阅读器的解释不同。当使用 role="alert" 它有一个隐含的 aria-live="assertive" 所以你不需要两者。

页面加载时aria-live元素应该在DOM中,需要阅读的内容按需添加。屏幕阅读器不会总是不断地分析页面以查找其他元素,因此不会公布。

Chrome vox 会不断解析并拾取它,JAWS 通常会拾取它,根据我的经验,Voiceover 和 Talkback 通常不会。画外音和对讲能否按预期工作在很大程度上取决于使用正确的浏览器。

QuenticC 大部分是正确的,但是 aria-live="assertive" 公告在初始页面源中存在并且稍后添加内容时最可靠。 role="alert"(通常)在作为新元素注入页面时效果最佳。