如何在 JavaScript 中中断屏幕阅读器?

问题描述 投票:0回答:1

我正在编写一个 nwjs 游戏,我想为其添加辅助功能。

我当前正在使用

aria-live
属性与屏幕阅读器进行通信。
document.getElementById("game").setAttribute("aria-live", "assertive")

我通过这样做来宣布消息

document.getElementById("game").setAttribute("aria-label", "my text")

这可行,但我需要一种方法来中断它。

“自信”和“礼貌”的 aria-live 设置都不起作用。
我尝试将标签文本设置为“”或“.!”但它也不起作用。

有办法做到这一点吗?或者也许有更好的方法在 nwjs javascript 应用程序中与屏幕阅读器进行通信?

javascript html wai-aria screen-readers nwjs
1个回答
0
投票

首先,不考虑 live 属性,因此如果在创建元素后添加 aria-live 属性,则该属性不起作用。 为了使其正常工作,该属性必须在元素添加到 DOM 时存在

如果在页面加载后将元素添加到 DOM,它甚至也不会一直工作(某些屏幕阅读器 + 浏览器 + 操作系统组合不支持它)。 最安全/最兼容的是让 自页面加载以来已经存在活动元素

其次,要说出的文本必须作为内容/子元素添加到实时元素中。使用appendChild、insertAdjacentHTML等

标签和/或描述的更改不会自动读取,无论是真正的

<label>
、aria-label还是aria-labelledby都是一样的。 仅读取元素的内容

另请注意,页面加载时元素内存在的内容将不会被读取。至少,它也不是普遍适用的。如果您需要在页面加载时说一些话,诀窍是在页面加载后不久(即几百毫秒后)添加内容。

最后,要回答实际问题,不,您不能打断屏幕阅读器当前所说的内容。清除实时区域的内容可以在少数 SR+浏览器+操作系统组合中使用,但只是少数。 它并不是在所有地方都适用,所以你不应该依赖它。

但是,如果您使用 Elektron 或 nw.js 制作应用程序,则可以调用将直接与屏幕阅读器交互的本机库。
优点:发消息说话延迟小一些,可以有效控制什么时候打断语音。
缺点:它不可移植,并且您可能需要调用与支持的屏幕阅读器+操作系统组合一样多的不同 API。

如果你有兴趣,我是这样一个 Windows 库的作者,它叫做 UniversalSpeech。它可以从 nw.js/Elektron 调用。

© www.soinside.com 2019 - 2024. All rights reserved.