如何在角度变化状态下让屏幕阅读器读取整个页面?

时间:2014-11-19 23:48:18

标签: javascript angularjs firefox accessibility nvda

要求:在每个页面上更改屏幕阅读器必须阅读整个页面内容。

我们使用firefox + NVDA进行测试,因为角度不会改变页面"我们尝试了以下内容,使其在更改状态时读取整个页面:

aria-live="assertive"

这在很大程度上是读取我们网站中文本的变化,但它只读取它的添加内容,在我们的例子中,我们有一个表填充ng-repeat并且它读取了添加的信息但是没有任何上下文(它没有说明正在读取的行或列)

另一个问题是形式,当用角度填充时,屏幕阅读器会在它们被角度填充之前读取它,这是用$timeout解决的,但是当aria-live读取更改时跳过一些部分,如果我们添加aria-atomic强制读取,我们有一些选项有多个选项,那些被读取(所有这些,我们有超过一百个选项)。这不是屏幕阅读器读取的方式,它们只读取前十个选项或单击它们时可见的选项。

请记住,如果没有任何aria-live或aria-atomic,当您以角度更改状态时,不会通知用户任何更改。

几乎放弃后我们决定可能我们的重点是错误的,我们需要让每个州都有自己的页面,所以我们使用了以下内容:

function ForceNVDARead() {
    $(window).on('hashchange', function () {
        location.reload();
    });
}

对于URL中的每个更改,都会强制重新加载。这很有效,一切都被正确阅读,我们几乎认为这解决了一切。除此之外,会导致客户端向我们的服务器发出双重请求。

有没有办法让NVDA像常规页面加载一样读取角度状态的内容,而不必强制重新加载页面?

请不要仅仅使用咏叹调角色或类似的东西,而且我们已经拥有它们,我们需要应用程序在更改状态时读取所有内容。

感谢任何帮助,我们即将放弃,并在没有角度的情况下重新启动项目,因为我们无法达到我们的可访问性要求。

1 个答案:

答案 0 :(得分:7)

  

要求:在每个页面上更改屏幕阅读器必须阅读整个页面内容。

从可访问性的角度来看,这基本上不是一个要求,它相当于让某人在屏幕上一次读取所有内容,或者使用readquick,这不是自然的用法。

屏幕阅读器辅助功能is acheivable when using Angular,但我们需要重置一些假设:

  • 当您有页面更新时,关键是manage the focus,然后转到新内容。这允许人们以自己的方式阅读,而不是你假设他们必须阅读的方式。
  • ARIA live适用于页面上其他地方的小更新(远离键盘焦点),而不是整个内容,这不是答案,我会完全放弃。
  • 如果人们在加载之前阅读表格,那可能是试图用ARIA-live强制阅读的副作用。如果没有,那么尝试使用焦点管理将焦点放在表单的顶部。
  • 可能值得一读a tutorial on NVDA usage,或与“本地人”交谈。用户。我可以从经验中说,你没有像最终用户那样使用它,所以要更好地理解什么是正常的'互动就像。

如果你放弃使用ARIA-live并进行焦点管理,你可能会解决大部分问题,但是从不同的角度来看可能会有更多的问题。