要求:在每一页更改时,屏幕阅读器必须阅读整个页面内容。
我们使用 firefox+NVDA 进行测试,由于 Angular 不会“更改页面”,我们尝试了以下方法以使其在更改状态时读取整个页面:
aria-live="assertive"
这在很大程度上读取了我们网站中文本的更改,但它只读取了它正在添加的内容,在我们的例子中,我们有一个正在填充的表格ng-repeat
,它读取正在添加的信息但没有任何上下文(它没有说明哪一行或正在读取列)
另一个问题是表单,当被角度填充时,屏幕阅读器会在它们被角度填充之前读取它,这已经解决了$timeout
但是当aria-live
读取更改时它仍然会跳过一些部分,如果我们添加aria-atomic
强制读取,我们有一些带有多个选项的选择,并且已阅读(所有这些,我们有一百多个选项)。这不是屏幕阅读器的阅读方式,它们仅阅读前十个选项或单击它们时可见的选项。
请记住,如果没有任何 aria-live 或 aria-atomic,当您更改 Angular 状态时,不会通知用户任何更改。
在几乎放弃之后,我们决定也许我们的焦点是错误的,我们需要让每个州都有自己的页面,所以我们使用了以下内容:
function ForceNVDARead() {
$(window).on('hashchange', function () {
location.reload();
});
}
这对于 URL 中的每次更改都会强制重新加载。这很好用,一切都被正确读取,我们几乎认为这解决了一切。除非这会导致客户端向我们的服务器发出双重请求。
有什么方法可以让 NVDA 像常规页面加载一样读取角度状态的内容,而不必强制重新加载页面?
请不要说仅使用 aria-roles 或类似的东西对此不起作用,我们已经拥有它们,我们需要应用程序在更改状态时读取所有内容。
感谢任何帮助,我们即将放弃,并在没有角度的情况下重新启动项目,因为我们无法实现我们的可访问性要求。