В рамках некоторой a11y-работы, которую я недавно выполнял для одностраничного приложения, я добавил код, который вызывает focus()
в заголовке страницы всякий раз, когда загружается новая страница.Это прекрасно работает на настольном компьютере и корректно читается программой чтения с экрана, но полностью теряет связь с VoiceOver в мобильном Safari.
После нескольких часов отладки и поиска в Google я обнаружил, что при попытке сфокусироваться на элементе (который обычно не фокусируется) с дочерними элементами, похоже, не получается.
Пример кода:
<div id="header1" tabindex="-1">Hello world</div>
<div id="header2" tabindex="-1">Goodbye <span>cruel cruel</span> world</div>
Затем включите VoiceOver в Safari и попробуйте позвонить:
document.getElementById('header1').focus();
И обратите внимание, что он читается, но
document.getElementById('header2').focus();
абсолютно ничего не делает, что кажетсякак полностью нарушенное поведение для меня.Я делаю что-то в корне неправильно, или это известная проблема, и есть ли способ обойти это без необходимости фокусироваться на элементах без детей?