Javascript 如何使屏幕阅读器在角度改变状态时读取整个页面?
要求:在每次页面更改时,屏幕阅读器必须阅读整个页面内容 我们使用firefox+NVDA进行测试,由于angular不“更改页面”,我们尝试了以下方法,使其在更改状态时读取整个页面:Javascript 如何使屏幕阅读器在角度改变状态时读取整个页面?,javascript,angularjs,firefox,accessibility,nvda,Javascript,Angularjs,Firefox,Accessibility,Nvda,要求:在每次页面更改时,屏幕阅读器必须阅读整个页面内容 我们使用firefox+NVDA进行测试,由于angular不“更改页面”,我们尝试了以下方法,使其在更改状态时读取整个页面: aria-live="assertive" 这在很大程度上读取了我们网站中文本的变化,但它只读取添加的内容,在我们的例子中,我们有一个表,其中填充了ng repeat,它读取添加的信息,但没有任何上下文(它没有说读取的是哪一行或哪一列) 另一个问题是表单,当使用angular填充时,屏幕阅读器将在使用angula
aria-live="assertive"
这在很大程度上读取了我们网站中文本的变化,但它只读取添加的内容,在我们的例子中,我们有一个表,其中填充了ng repeat
,它读取添加的信息,但没有任何上下文(它没有说读取的是哪一行或哪一列)
另一个问题是表单,当使用angular填充时,屏幕阅读器将在使用angular填充之前读取表单,这通过$timeout
解决,但当aria live
读取更改时,它将跳过一些部分,如果我们添加aria atomic
强制读取,我们有一些带有多个选项的选项,这些选项都被读取了(所有这些选项,我们有100多个选项)。这不是屏幕阅读器的阅读方式,他们只阅读前十个选项,或者当你点击它们时可以看到的选项
请记住,如果没有任何aria-live或aria-atomic,则当您在中更改状态时,不会通知用户任何更改
在几乎放弃之后,我们决定也许我们的重点是错误的,我们需要让每个州都有自己的页面,因此我们使用了以下方法:
function ForceNVDARead() {
$(window).on('hashchange', function () {
location.reload();
});
}
这对于URL中的每次更改都将强制重新加载。这很好,所有的东西都被正确地阅读了,我们几乎认为这解决了所有的问题。除此之外,这会导致客户端向服务器发出双重请求
有没有办法让NVDA像常规页面加载一样读取角度状态的内容,而不必强制重新加载页面
请不要说只使用aria角色或类似的东西,因为我们已经有了它们,我们需要应用程序在更改状态时读取所有内容
感谢任何帮助,我们即将放弃,重新启动项目,因为我们无法实现我们的可访问性要求
要求:在每次页面更改时,屏幕阅读器必须阅读整个页面内容
从可访问性的角度来看,这根本不是一个要求,它相当于让一个人看着屏幕一次读一行,或者使用,这不是自然使用
屏幕阅读器的可访问性,但我们需要重置一些假设:
- 当您进行页面更新时,关键是切换到并移动到新内容。这使人们能够以自己的方式阅读,而不是你一直认为他们必须阅读的方式
- ARIA live旨在对页面其他地方(远离键盘焦点)进行小更新,而不是全部内容,这里不是答案,我将完全放弃它
- 如果人们在加载表单之前阅读表单,那么这可能是使用ARIA-live强制阅读的副作用。如果没有,则尝试使用焦点管理在加载表单时将焦点放置在表单顶部
- 它可能值得一读,或者与“本地”用户交谈。我可以从经验中说,您没有像最终用户那样使用它,所以要更好地理解“正常”交互是什么样子的
如果您放弃使用ARIA live,转而使用focus management,您可能会解决大部分问题,但从另一个角度来看,以后可能会有更多问题。您在页面的何处添加了
ARIA live=“assertive”
?是在整个身体上吗?在桌子上?你能在整个身体上尝试一种活的、原子的和相关的组合吗?例如,aria-live=“polite”aria-atomic=“true”aria-relevant=“additions-removals”
。另一种方法是使用angulars$stateChangeStart
和$statechangesuccessuccess
事件“切换”各个元素上的aria值。(不幸的是,我目前没有办法测试这些建议)我们已经尝试了很多,实际上没有任何效果。问题主要出在表单上,当你想编辑一些东西时,因为它填充了字段,所以有些字段不会更改,所以我们不能手动将aria live放在每个字段上,因为不是所有字段都在更改/读取。根据这个问题的视图数,像我这样的很多人可能都有相同的要求,我觉得这很有趣。