如何让屏幕阅读器在 Angular 或任何单页应用程序中加载新页面时发出通知?
How to make screen readers announce when a new page is loaded in Angular or any single page apps?
我一直在到处寻找这个问题的最佳解决方案,但我没有找到任何好的解决方案。
我希望像 NVDA 或 JAWS 这样的屏幕 readers 在加载时宣布新页面。但在使用箭头键滚动页面时,它不应该检测到此消息。
我尝试了很多东西。
例如,我添加了一个带有 role="alert" and/or aria-live="polite" 的 span 元素,并使用 CSS 隐藏它,并动态地将 innerHtml 添加到该元素屏幕 reader 宣布。但是屏幕 reader 会在使用箭头键滚动页面并再次阅读消息时检测到它。
所以设置一个超时函数,在 2 秒后将 innerHtml 设置为空。
以上内容在某些浏览器中运行良好,但在 IE 浏览器和 JAWS 中,当我两次更改 innerHtml 时,它会读取警报两次。与 NVDA 配合良好。
但是我想知道是否有更好的方法。
我也尝试过使用 [attr.aria-label] 属性 绑定到 ts 文件中的变量。
<div [attr.aria-label]="title" role="alert"></div>
并用我想宣布的消息更改标题变量。但是屏幕 reader 将在滚动时始终检测到此 div 元素。
请帮忙
angular 提供了一项 'Title' 服务,您可以使用它。
这基本上会将标题设置为浏览器选项卡中的整个页面,使屏幕阅读器在加载新页面时大声读出标题。
import { Title } from '@angular/platform-browser';
constructor(private title: Title){}
ngOnInit() {
this.title.setTitle('Your Title for the page');
}
注意:HTML 模板中不需要任何内容。只需完成此操作即可解决您的问题。
每个组件都有自己有意义的标题。不像 page1、page2 等,
但诸如客户详细信息页面、客户个人资料页面等
我一直在到处寻找这个问题的最佳解决方案,但我没有找到任何好的解决方案。 我希望像 NVDA 或 JAWS 这样的屏幕 readers 在加载时宣布新页面。但在使用箭头键滚动页面时,它不应该检测到此消息。
我尝试了很多东西。
例如,我添加了一个带有 role="alert" and/or aria-live="polite" 的 span 元素,并使用 CSS 隐藏它,并动态地将 innerHtml 添加到该元素屏幕 reader 宣布。但是屏幕 reader 会在使用箭头键滚动页面并再次阅读消息时检测到它。 所以设置一个超时函数,在 2 秒后将 innerHtml 设置为空。
以上内容在某些浏览器中运行良好,但在 IE 浏览器和 JAWS 中,当我两次更改 innerHtml 时,它会读取警报两次。与 NVDA 配合良好。
但是我想知道是否有更好的方法。
我也尝试过使用 [attr.aria-label] 属性 绑定到 ts 文件中的变量。
<div [attr.aria-label]="title" role="alert"></div>
并用我想宣布的消息更改标题变量。但是屏幕 reader 将在滚动时始终检测到此 div 元素。
请帮忙
angular 提供了一项 'Title' 服务,您可以使用它。
这基本上会将标题设置为浏览器选项卡中的整个页面,使屏幕阅读器在加载新页面时大声读出标题。
import { Title } from '@angular/platform-browser';
constructor(private title: Title){}
ngOnInit() {
this.title.setTitle('Your Title for the page');
}
注意:HTML 模板中不需要任何内容。只需完成此操作即可解决您的问题。
每个组件都有自己有意义的标题。不像 page1、page2 等, 但诸如客户详细信息页面、客户个人资料页面等