当您在我的应用程序中搜索某些内容时,我有一些动态文本"找到n个结果"。我对这个元素进行了如下aria-atomic="true"
和aria-live="assertive"
:
<p aria-atomic="true" aria-live="assertive">n results found</p>
在Mac的画外音上,消息可以正确说出,没有任何问题。但是在装有JAWS软件的Windows上,该消息不会说出来。我注意到,如果我使用快捷键"Insert+Z"关闭虚拟光标,aria-live
字符串会正确发出。
我不希望用户点击Insert + Z
来完成这项工作。有没有办法以编程方式禁用虚拟游标?或者还有其他方法可以解决这个问题吗?
我尝试了其他几种组合,例如使用role="status"
,role="alert"
与aria-live="polite"
,aria-atomic="true"
。所有这些都适用于 Mac 的画外音,以及当虚拟光标在带有 JAWS 的窗口上被禁用时。
简答
简短的回答是否定的,您无法从浏览器中禁用虚拟光标。 在实时区域方面,有一些属性组合和代码比其他属性组合和代码效果更好。进行搜索,您应该找到它们。许多人已经写过关于这个主题的文章。
尽可能多地使您的代码标准化:使用 ARIA、尊重 WCAG 等,而不是使用复杂或专有的解决方案。 从长远来看,对于大多数用户以及您自己的应用程序的维护来说,它要好得多。
更长的答案
为了纯粹的技术文化,更长的答案是肯定的,可以从外部程序运行 Jaws 脚本。有两种解决方案:
- 使用 ActiveX 或 COM 客户端直接调用 Jaws FSAPI 的 API。ProgID "freedomsci.JawsApi",方法
BOOL RunScript(BSTR)
和BOOL RunFunction(BSTR)
。 - 使用专门的库来调用 FSAPI。我是一个名为UniversalSpeech的DLL的作者,它正是这样做的。
但是,问题是,据我所知,两者都不容易从浏览器中使用。他们充其量需要用户的许可,通常权限请求中显示的警告会使大多数用户自然拒绝。
很难解释为什么你需要访问它,对吧?因此,强烈建议您远离它
但是,可能有一个例外,即上述两种解决方案是可能的。如果您在嵌入式浏览器中运行桌面应用程序,例如 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"
我知道带有aria-live="assertive"
role="alert"
是多余的,因为aria-live="assertive"
在使用时隐式添加角色警报。但我确实尝试过它作为一个实验,因此上面提到了它。
以上所有内容在Mac的画外音上都运行良好。