我正在尝试修复Angular2 Web应用程序中屏幕阅读器的可访问性错误。在Chrome中,加载componentA(Before下的代码)时,焦点是整个浏览器窗口,并且屏幕阅读器讲述人宣布了componentA页面的标题。但是,在Edge中,焦点与上一页保持不变,从而导致标题未宣布。目标是无论在哪个浏览器中,标题都应该发布一次,并且只能发布一次。
我通过修改componentA.html(After之后的代码)尝试了该解决方案,并将焦点设置为ngOnInit()中的componentA-id。即:
document.getElementById('componentA-id').focus();
现在在Edge中,讲述人可以正确地关注整个componentA并宣布componentA的标题。但是,在Chrome中,整个窗口被聚焦,componentA也被聚焦,这导致标题被两次命名。有什么方法可以禁用Chrome焦点,或者有其他方法可以解决此问题以实现我的目标?
之前:
componentA.html
<div>
<div title="ComponentA Title" role="banner">ComponentA Title</div>
...
...
</div>
后:
componentA.html
<div aria-label="ComponentA Title" id="componentA-id" tabindex="-1">
<div title="ComponentA Title">ComponentA Title</div>
...
...
</div>
最佳答案
您有一个单页应用程序吗?你说:
“ ...焦点保持与上一页相同”
这让我觉得您正在将新内容加载到当前页面中,例如单页面应用程序。
如果您要更新页面标题(对于单页面应用程序的屏幕阅读器来说是一件好事),由于屏幕阅读器不知道您更新了页面的某些内容,因此不必宣布新的页面标题。 。如果页面被重新加载,标题将被读取。
要读取页面标题,您需要更新将aria-live
设置为“礼让”的元素。该元素可以在视觉上隐藏,以便只有屏幕阅读器才能知道。
<div class="sr-only" aria-live="polite"></div>
(有关“仅sr”类的信息,请参见What is sr-only in Bootstrap 3?)
更新页面时,将页面标题文本插入
中,如下所示:
屏幕阅读器将阅读新文本,您无需将重点放在新文本上。
<div class="sr-only" aria-live="polite">ComponentA Title</div>
屏幕阅读器将阅读新文本,您无需将重点放在新文本上。
09-25 18:26