Javascript 公告结束时切换aria live?

Javascript 公告结束时切换aria live?,javascript,frontend,accessibility,wai-aria,accessible,Javascript,Frontend,Accessibility,Wai Aria,Accessible,我目前正在进行一个交互式pdf阅读器项目,以使其更易于访问。我制作了一个在屏幕上看不见的元素,并赋予它aria-live属性。每当我想要宣布某事,比如打开抽屉,我就设置元素的文本。 但是,如果用户希望整个页面都是公告,语音切换的键是VO+a,那么元素也会被读取,但是我想防止这种情况发生 有人能建议这是否是宣布变更的正确方式吗?如果是,那么如果用户希望读取整个页面,我如何防止读取元素?我目前正在使用元素来宣布抽屉是否打开/关闭,或者字体/页码是否有更改等。您无法阻止屏幕阅读器读取整个页面的aria

我目前正在进行一个交互式pdf阅读器项目,以使其更易于访问。我制作了一个在屏幕上看不见的元素,并赋予它aria-live属性。每当我想要宣布某事,比如打开抽屉,我就设置元素的文本。 但是,如果用户希望整个页面都是公告,语音切换的键是VO+a,那么元素也会被读取,但是我想防止这种情况发生


有人能建议这是否是宣布变更的正确方式吗?如果是,那么如果用户希望读取整个页面,我如何防止读取元素?我目前正在使用元素来宣布抽屉是否打开/关闭,或者字体/页码是否有更改等。

您无法阻止屏幕阅读器读取整个页面的aria live元素。 您可以从屏幕上直观地隐藏它,但不能从虚拟缓冲区或屏幕读取器的内部表示中隐藏它,使其无法访问和读取

要在屏幕上隐藏元素,请查看流行框架中存在的CSS类,如.visually hidden、.sr_only等。 这是一种常见的向屏幕阅读器用户显示内容的方式,同时为普通屏幕用户隐藏内容

要从屏幕阅读器表示中隐藏元素,但不一定要隐藏屏幕,可以使用aria hidden。但阿丽亚的生活也变得不合时宜

您还可以考虑使用display:none或visibility:hidden对scren阅读器和可视屏幕隐藏元素。类似的其他技巧,如字体:0、宽度/高度:0、不透明度:0、剪辑:0等,也有同样的问题,它们不一定能有效地将元素隐藏在任何地方。但是,在这种情况下,行为并不一致。ARia live在某些屏幕阅读器+浏览器组合中将保持正常运行,具体取决于使用的技巧,而它将停止与其他浏览器合作,最明显的是Safari Mac和iOS上的画外音

一个小技巧是从DOM中删除元素,或者在显示或设置元素后不久将其置为空白,这样浏览页面的scren阅读器就不会在之后找到它。 但是,您也必须小心这一点。我已经注意到,在某些情况下,如果该元素在公告仍在播放时被过早删除,屏幕阅读器会立即剪切公告内容。 当然,你也无法知道屏幕阅读器是否已经阅读完一条消息,它是否正在阅读,或者它是否还没有阅读。如果执行此操作,请慢慢地让元素保持可见5、10秒或更长时间,以确保消息被完全读取


因此,总而言之,您没有真正好的方法来保持您的aria live元素工作,同时防止屏幕阅读器通过页面的正常阅读方式访问它。

As@quentinc已经解释了视觉隐藏和屏幕阅读器隐藏元素之间的区别,不能让某个元素对屏幕阅读器可用,但要阻止它执行“全部读取”命令


在许多情况下,使用aria-live非常方便,但是如果没有关于您具体情况的更多细节,就很难提出其他建议。但,既然你们提到了抽屉是开着的,对我来说,这听起来像是可以膨胀/折叠的东西。如果是这样,那么你应该退房。您可以将该属性的值从false更改为true,以向屏幕阅读器指示某个对象已扩展。抽屉开口将被视为扩大。屏幕阅读器将负责宣布更改,这样您就不需要aria live了。

谢谢您的回复!我目前正在给抽屉赋予aria扩展属性,但按钮似乎只是宣布菜单已折叠。如果用户单击菜单按钮,屏幕阅读器是否会宣布它已展开?按钮菜单也应展开。谢谢你的回复!如果没有隐藏aria live元素的好方法,您会建议什么是解决此问题的最佳方法。我可以把它放在那里,但我不想让用户在阅读整个页面时听到你增加字体大小的声音。然后你可以正式接受答案,谢谢。根据消息的长度,确保消息至少保持可见几秒钟,以确保屏幕阅读器有时间完全阅读消息。如果您不想或无法隐藏该元素,那么下一个最好的解决方案可能是将其放在页面的末尾,或者放在一个不太容易被阅读和脱离主题的地方。我能说“Y”糟糕透了吗?