我对网页的可访问性很陌生。我有一个应用程序,其中正文的内容根据ajax调用中的标题链接点击而改变,而不刷新页面。因此,每次点击不同页面内容(表格+按钮+信息文本(的链接,正文中的HTML内容都会更新。
我在这里的要求是,屏幕阅读器应该在每次加载页面时公布信息文本。这里的容器是所有页面的主体(或主体内的直接div(。所以我把它变成了咏叹调;礼貌";,但每次加载页面时,它都会公布整个页面的内容,但我想让它只公布信息文本。页面的其他元素应在焦点/访问时公布。我希望我能应用aria live="关闭";对于所有其他元素,但我正在寻找任何理想的解决方案。我无法更改应用程序的布局。
有人能帮我吗。提前谢谢。
SPA模式最佳实践
您基本上遵循的是"单页应用程序"模式。因此,推荐的处理导航的方法实际上是非常直接的,有两个步骤。
- 告诉用户即将进行导航(在导航之前(
- 让用户知道加载已完成(导航后(
导航前(单击链接(
如果您使用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导航功能中执行的最后一个操作就是将焦点放在此标题上。
这有两个好处:
- 它让用户知道他们现在在哪里
- 它还可以让他们知道页面加载何时完成(因为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>