适用于单页应用程序的ARIA Live Regions



我对网页的可访问性很陌生。我有一个应用程序,其中正文的内容根据ajax调用中的标题链接点击而改变,而不刷新页面。因此,每次点击不同页面内容(表格+按钮+信息文本(的链接,正文中的HTML内容都会更新。

我在这里的要求是,屏幕阅读器应该在每次加载页面时公布信息文本。这里的容器是所有页面的主体(或主体内的直接div(。所以我把它变成了咏叹调;礼貌";,但每次加载页面时,它都会公布整个页面的内容,但我想让它只公布信息文本。页面的其他元素应在焦点/访问时公布。我希望我能应用aria live="关闭";对于所有其他元素,但我正在寻找任何理想的解决方案。我无法更改应用程序的布局。

有人能帮我吗。提前谢谢。

SPA模式最佳实践

您基本上遵循的是"单页应用程序"模式。因此,推荐的处理导航的方法实际上是非常直接的,有两个步骤。

  1. 告诉用户即将进行导航(在导航之前(
  2. 让用户知道加载已完成(导航后(

导航前(单击链接(

如果您使用SPA模式(从而中断正常导航(,则需要向用户发出页面正在加载的信号。例如,我点击了你的链接,当你用e.preventDefault()或等效程序拦截正常的浏览器行为时,你需要让我知道正在执行一个操作(加载…..(。

最简单的方法是在解释页面加载的区域上使用aria-live=assertive。你可以用谷歌搜索如何正确地实现这一点,但本质上,你会在点击链接的第二秒更新隐藏div(<div aria-live="assertive" class="visually-hidden">loading</div>(的内容

这应该在进行任何AJAX调用之前完成。

导航后(加载新内容(

加载新页面时,您需要管理焦点。

做到这一点的最佳方法是为每个具有tabindex="-1"的页面添加一个级别1的标题(<h1>(。使用tabindex="-1"意味着除了JavaScript之外,其他任何东西都无法聚焦标题,因此不会干扰正常的文档流。

页面加载并且内容填充完毕后,您在JavaScript导航功能中执行的最后一个操作就是将焦点放在此标题上。

这有两个好处:

  1. 它让用户知道他们现在在哪里
  2. 它还可以让他们知道页面加载何时完成(因为AJAX导航不会在大多数屏幕阅读器中宣布页面何时加载(

此时,您可能还需要清除<div aria-live="assertive">内容,以便为进一步导航做好准备。

您是否尝试过包装"带电区域"-其中更新发生在div中,aria-live=";礼貌";。然后屏幕阅读器将只在更新时宣布这些区域。不要在arialive="礼貌";。

<div aria-live="polite">
<p id="errorText">Announced on update</p>
</div>
<div>
other page sections..
</div>

最新更新