16

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

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

这个例子的 JSFiddle

<!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 配置,每次单击按钮时,我都会听到:

点击数字 HTML 值(点击后) JAWS 说
------------ ------------- ---------
1 1 “更新按钮 0”
2 2“1”
3 3 "2"

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

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

4

2 回答 2

16

你的代码是正确的。显然,“1落后”已经被发现。从链接来看,似乎使用aria-atomic="true"可以解决问题。但是,给出的示例在 IE9 和 Firefox 中确实可以正常工作。

如果您还没有偶然发现它们,请查看codetalksaccessculture.org上的测试用例。有很多细微的差别需要注意。当测试失败时不要感到惊讶!在过去一年左右的时间里,我遇到了一些可能对您有所帮助的(不充分的)技巧。

方法一:role="alert"

alert角色应该等同于aria-live="assertive",但旧版本的 JAWS 没有正确处理它。查看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>

方法2:焦点强制破解

通过动态创建 DOM 元素并强制将焦点集中在它上面,您可以“欺骗”大多数屏幕阅读器来阅读内容。它很老套,但很有效……有点像Create and Focus示例的重点。简化后,您可以执行以下操作:

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

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

大多数时候,仅仅隐藏/显示内容实际上效果很好。但是,VoiceOver的焦点停留在元素上,并且在再次显示时不会说出其内容。因此,从 DOM 中删除它似乎是目前最万无一失的方法。我不喜欢它,但事情就是这样。

于 2011-08-02T19:58:00.230 回答
1

如果您使用的是 JAWS,我认为您还需要配置默认模式;因为屏幕阅读器有“只读”模式。这个问题可以通过按下来解决:

(Insert + z) 打开/关闭只读屏幕阅读器。

http://www.mozilla.org/access/qa/win-webcontent-jaws.html

于 2014-03-12T14:59:06.783 回答