Android Talkback 未针对网络注册 onFocus。如何使用 Android Talkback 操纵可访问性焦点?

kdi*_*zle 6 javascript android accessibility talkback reactjs

正如标题所说,Android Talkback 没有注册该onFocus事件。我知道该onFocus事件从未注册过,因为屏幕阅读器使用了一种特殊类型的可访问性焦点。那么,我们如何驱动/操纵可访问性焦点来为用户提供更好的体验?

我在这里有一个例子:https : //codesandbox.io/s/r54j2mqrl4。所以这里console.log("hello!")没有在移动 Android Talkback 中为我注册,但是它在桌面 mac OSX 上正确注册(没有屏幕阅读器)。我正在使用 Tab 键进行导航。

是否有类似于onFocus用于 Android Talkback 的可访问性焦点的事件?

提前感谢您的时间。

设备和版本

手机 Android Talkback:三星 Galaxy Tab S2,Android 7.0 版,Google Chrome 62.0.3202.84

桌面 Mac OSX:macOS Sierra 10.12.6,谷歌 Chrome 61.0.3163.100

Chr*_*sCM 4

“.focus()”方法理论上应该有效。如果正在接收“焦点”的事物不会同时接收可访问性焦点,则该问题就会出现。Android 辅助功能服务只能辅助功能聚焦那些也可辅助功能聚焦的事物。

不幸的是,您无法直接从 Javascript 操作 Accessibility Focus,只能操作焦点。话虽如此,当您在 Android 中并且某些内容请求焦点时,这通常表明辅助功能焦点也会随着焦点一起移动到该项目。用 TalkBack 术语来说,这就是选项卡导航的工作原理,辅助功能焦点只是跟随输入焦点。它并不完美,但 Focus 和 Accessibility Focus 希望相同是合理的期望。尽管并非总是如此:EditTexts 在 TalkBack 中可以处于准聚焦/未聚焦状态,这是有充分理由的......您可能需要在字段仍然具有光标(输入焦点)时与屏幕键盘进行交互。

如果以下情况为真:

  • 您的元素具有可访问性和可聚焦性
  • 你的元素是可聚焦的
  • A11yFocusable 的事物和可聚焦的事物是相同的,而不仅仅是后代(非常重要)。

您可以通过在 Android 设备监视器中进行探索来轻松确认上述三件事。三次检查您是否没有关注您希望获得可访问性焦点的事物(例如元素的子元素)。

如果在那之后,你对这个东西调用 .focus() ,并且它不起作用,那么你基本上已经在用来渲染 HTML/Javascript 内容的 webview 中发现了一个错误,并且你无能为力关于它。