【问题标题】:Using UIAccessibility to read HTML selection使用 UIAccessibility 读取 HTML 选择
【发布时间】:2019-02-28 22:04:03
【问题描述】:

我正在尝试实现一项功能,该功能将使用 VoiceOver 读取显示在 WKWebView 中的选定 HTML 片段。

我最初尝试将 html 展平为文本,然后使用 AVSpeechSynthesizer() 读取用文本实例化的 AVSpeechUtterance

let synth = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: myFlattenedText)
if synth.isSpeaking {
    synth.stopSpeaking(at: .immediate)
}
synth.speak(utterance)  

这通常有效,但 VoiceOver 提供的体验更出色。例如,我的 HTML 具有启用辅助功能的 MathJax。 VoiceOver 在阅读上下文数学方程式方面做得很好,而将 html 展平为文本的策略则不然。

我尝试使用 html 片段创建一个NSAttributedString,详细信息为here,但这并没有更好的效果。

有没有办法利用 VoiceOver 功能,可能以某种方式使用UIAccessibility,以与 VoiceOver 相同的方式读取启用了可访问性的 HTML?

【问题讨论】:

  • 强烈怀疑只有通过嵌入 Web 视图才能获得所需的体验。
  • 我正在使用网络视图。当用户在 webview 中选择内容时,我想将内容读给用户。我可以在这里使用 js 或本机解决方案,如果它有所作为的话。不过,我无法使用 js 解决方案。
  • 我一定是误会了。为什么用户不能使用 VoiceOver 浏览网页视图?
  • 使用 VoiceOver 效果很好。我们的应用程序还允许用户通过菜单命令选择并阅读内容。我对这个功能并不疯狂,但我不会打那些电话:)

标签: ios swift voiceover uiaccessibility avspeechsynthesizer


【解决方案1】:

您所看到的是 WebKit 的 MathJax 支持与经过深思熟虑的 UIAccessibility 支持相结合。虽然我发现的最新文档表明 these properties are not accessible to web developers,但作为 iOS 开发人员,您应该能够遍历 UIAccessibility 元素层次结构以转储 MathJax 内容的 accessibilityLabelaccessibilityValue

编辑:正如@mattsven 指出的那样,问题在于 WKWebView 内容是在远程进程中呈现的,因此不会将其可访问性元素暴露给包含的应用程序。

【讨论】:

  • 感谢您的建议和链接。我以为我正在寻找解决方案(使用选择的 html 制作一个临时 webview),但我似乎无法从这个临时 webview 或我的原始 webview 中获得任何可访问性属性。 accessibilityLabelaccessibilityValueaccessibilityElements 都为零。
  • @JonBrooks 你通过accessibilityChildren递归了吗?
  • 我只在 NSAccessibility 中看到 accessibilityChildren 属性,而不是 UIAccessibility。它是不是视图的属性?
  • @JonBrooks 哎呀。我的意思是建议尝试accessibilityElements,看来你做到了。让我来试验一下。
  • 更新:WKWebView 通过远程进程呈现,does not expose 其可访问性元素可以通过您的代码访问。
猜你喜欢
  • 2019-03-16
  • 2023-03-21
  • 2021-11-26
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多