Android Talkback 未注册 Web 版 onFocus。如何使用 Android Talkback 操纵辅助功能焦点?

Android Talkback not registering onFocus for web. How do I manipulate accessibility focus with Android Talkback?

正如标题所说,Android Talkback 没有注册 onFocus 事件。我知道 onFocus 事件从未注册过,因为屏幕 reader 使用的是特殊类型的 accessibility focus。那么,我们如何才能 drive/manipulate 无障碍焦点为用户提供更好的体验?

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

是否有类似于 onFocus 事件的东西用于 Android Talkback 的辅助功能焦点?

预先感谢您的宝贵时间。

设备和版本:

移动设备 Android 对讲:Samsung Galaxy Tab S2,Android 7.0 版,Google Chrome 62.0.3202.84

桌面版 Mac OSX: macOS Sierra 10.12.6, Google Chrome 61.0.3163.100

“.focus()”方法理论上应该有效。如果正在接收 "focus" 的事物也不会获得可访问性焦点,那么问题就会出现。 Android Accessibility Service 只能以可访问性为焦点的事物也可以以可访问性为焦点。

遗憾的是,您不能直接从 Javascript 操作辅助功能焦点,只能操作焦点。话虽这么说,当您在 Android 中并且某项请求焦点时,这通常表明辅助功能焦点也将随焦点一起移动到该项目。在 TalkBack 术语中,这就是 Tab 导航的工作方式,Accessibility Focus 只是跟随输入焦点。它并不完美,但 Focus 和 Accessibility Focus 想要保持一致是一个合理的期望。尽管并非总是如此:EditTexts 在 TalkBack 中可以处于准 focused/unfocused 状态,这是有充分理由的……您可能需要在该字段仍具有光标(输入焦点)时与屏幕键盘进行交互。

如果下列情况成立:

  • 您的元素是辅助功能可聚焦的
  • 您的元素是可聚焦的
  • A11yFocusable 的东西和可聚焦的东西是一样的,而且不仅仅是后代(非常重要)。

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

如果在那之后,您在该对象上调用 .focus() 而它不起作用,那么您实际上已经在用于呈现 HTML/Javascript 内容的网络视图中发现了一个错误,并且不,你对此无能为力。