aria-live 和 JAWS

2024-05-02

我正在尝试让 aria-live 区域与 JAWS 11 和 IE8 一起正常工作。

使用下面的代码,我可以让 JAWS 在单击按钮时宣布新值,但行为不是我所期望的。

本例的 JSFiddle http://jsfiddle.net/fLzhR/

<!DOCTYPE html>
<html>
<head></head>
<body>
    <button onclick="document.getElementById('statusbar').innerHTML = parseInt(document.getElementById('statusbar').innerHTML) + 1">Update</button>
    <div id="statusbar" aria-live="polite">0</div>
</body>
</html>

使用我的 JAWS11/IE8 配置,每次单击按钮时我都会听到:



Click number  HTML Value (after click)  JAWS says
------------  ------------------------- ---------
1             1                         "Update button 0"
2             2                         "1"
3             3                         "2"
  

问题是,我的问题是:如何让 JAWS 宣布 aria-live 区域的当前值,而不是 aria-live 区域的先前值?

我还对其他屏幕阅读器如何处理此功能感兴趣。


你的代码是正确的。显然,“落后1”已经发现 http://wps.pearsoned.com/wps/media/objects/8956/9171771/ARIA_alert-live_aria-atomic_Jan_2011.html。从链接来看,它看起来好像使用aria-atomic="true"可能会解决问题。然而,给出的例子does在 IE9 和 Firefox 中正常工作。

如果您还没有偶然发现它们,请查看上的测试用例代码对话 http://codetalks.org/wiki/index.php/Set_of_ARIA_Test_Cases#aria-live and 无障碍文化网站 http://www.accessibleculture.org/research-files/test-cases/aria/alert/index.html。有很多细微的差别需要注意。当测试失败时不要感到惊讶!在过去的一年左右的时间里,我遇到了一些可能对您有所帮助的(不充分的)技巧。

方法一:role="alert"

The alert角色是应该是 http://www.w3.org/TR/wai-aria/roles#alert相当于aria-live="assertive",但旧版本的 JAWS 无法正确处理它。查看这些例子 http://www.accessibleculture.org/research-files/test-cases/aria/alert/index.html从 2011 年 2 月开始,其中规定:

如果您希望在 IE7 或 IE8 中支持 JAWS 10,那么最好将 role="alert" 和 aria-live="assertive" 的警报加倍。虽然这有点多余,因为根据定义,警报角色将作为断言实时区域进行处理,但这样做确实允许 JAWS 10 在这两个浏览器中自动宣布更新的警报内容。

Firefox4+ 和 IE9 都不需要这个。但它会是这样的:

<div id="statusbar" role="alert" aria-live="assertive">
  Contents will be spoken when changed
</div>

方法二:集中强制破解

通过动态创建 DOM 元素并强制将焦点置于其上,您可以“欺骗”大多数屏幕阅读器来阅读内容。这很hackish,但是很有效......并且在某种程度上是创造并聚焦 http://codetalks.org/source/widgets/alert/alert.html例子。简单来说,你可以这样做:

<div id="statusbar" role="alert"></div>

$('#statusbar')
  .clear()
  .append('<div tabindex="-1">' + newString + '</div>')
  .children().first().focus()
;

在大多数情况下,仅仅隐藏/显示内容实际上效果相当好。然而,画外音 http://www.apple.com/accessibility/voiceover/的焦点停留在该元素上,再次显示时不会说出其内容。因此,从 DOM 中删除它似乎是目前最简单的方法。我不喜欢这样,但事情就是这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

aria-live 和 JAWS 的相关文章

随机推荐