使用UIAccessibility读取HTML选择

时间:2016-11-11 18:58:05

标签: ios swift voiceover uiaccessibility avspeechsynthesizer

我正在尝试实现一项功能,该功能将使用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?

1 个答案:

答案 0 :(得分:0)

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

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