如何以编程方式关闭 JAWS 的虚拟光标?

How to turn off virtual cursor of JAWS programmatically?

当您在我的应用程序中搜索某些内容时,我有一些动态文本 "n results found"。我在这个元素上有 aria-atomic="true"aria-live="assertive" 如下:

<p aria-atomic="true" aria-live="assertive">n results found</p>

在Mac的画外音中,消息被正确地说出,没有任何问题。但在 Windows 上使用 JAWS 软件时,消息不会被说出来。我注意到如果我使用快捷键 "Insert+Z" 关闭虚拟光标,aria-live 字符串会正确发出。

我不希望用户点击 Insert + Z 来完成这项工作。有没有办法以编程方式禁用虚拟光标?还是有其他解决此问题的方法?

非常感谢任何帮助。

PS:我尝试了其他几种组合,例如使用 role="status"role="alert"aria-live="polite"aria-atomic="true"。所有这些都适用于 Mac 的画外音以及在 windows 上使用 JAWS 禁用虚拟光标时。

简答

简短的回答是否定的,您不能从浏览器中禁用虚拟光标。 关于实时区域,有些属性组合和代码比其他的效果更好。进行搜索,您应该找到它们。很多人已经写过这个主题。

尽可能使您的代码标准:使用 ARIA、尊重 WCAG 等,而不是使用复杂或专有的解决方案。 在长 运行 中,这对大多数用户和您自己的应用程序的维护来说要好得多。

更长的答案

出于纯技术文化的考虑,较长的答案是肯定的,可以从外部程序 运行 Jaws 脚本。有两种解决方案:

  1. 通过使用 ActiveX 或 COM 客户端直接调用 Jaws FSAPI) 的 API。 ProgID "freedomsci.JawsApi"、方法 BOOL RunScript(BSTR)BOOL RunFunction(BSTR).
  2. 使用专门的库来为您调用 FSAPI。我是一个名为 UniversalSpeech 的 DLL 的作者,它就是这样做的。

但是,据我所知,none 两者中的 none 很容易从浏览器中使用。他们充其量需要用户的许可,通常在请求许可时显示的警告会让大多数用户自然而然地拒绝。

很难解释为什么您需要访问它,对吗?所以,当然强烈建议你远离它

虽然可能存在例外情况,但上述两种解决方案都是可行的。如果您 运行 在嵌入式浏览器中安装桌面应用程序,例如 Elektron、NWJS,... 但即使在后一种情况下,我也强烈建议不要这样做,除非你有非常特殊和精确的需求。

原来 JAWS 对这项工作有一些非常严格的属性规则。我最终使用以下任一属性实现了此功能:

<p aria-live="assertive">n results found</p>

<p aria-live="polite">n results found</p>

在不关闭虚拟光标的情况下,以下组合不适用于 JAWS:

1. role="alert" aria-live="assertive"
2. role="alert" aria-live="assertive" aria-atomic="true"
3. aria-live="assertive" aria-atomic="true"
4. role="status" aria-live="assertive" aria-atomic="true"
5. role="status" aria-live="polite"
6. role="status" aria-live="assertive"
7. role="status" aria-live="polite" aria-atomic="true"

我知道 role="alert"aria-live="assertive" 是多余的,因为 aria-live="assertive" 在使用时隐式添加角色警报。但是我确实尝试过它作为实验,因此上面提到了它。

以上所有内容在 Mac 的画外音中都运行良好。