你的代码是正确的。显然,“落后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 中删除它似乎是目前最简单的方法。我不喜欢这样,但事情就是这样。