Привет, @awesomerobot! Я коллега Коди и инженер по доступности. Я изучил репозиторий, чтобы диагностировать проблему. Как вы, возможно, уже знаете, основная проблема заключается в следующем: (1) содержимое в скрытых постах недоступно для скринридеров и (2) посты раскрываются только тогда, когда находятся в поле зрения пользователя согласно PostStreamViewportTracker.
Продумывая возможное исправление, я хочу оптимизировать два аспекта: (1) обеспечить навигацию по каждому посту с помощью заголовков для скринридеров и (2) минимизировать изменения в репозитории Discourse и влияние на производительность.
Рекомендуемый подход заключается в том, чтобы для каждого загруженного поста сохранять лёгкую обёртку, включающую семантический заголовок H2, используемый для навигации по заголовкам, в то время как основной тяжёлый контент поста остаётся скрытым. Это обеспечивает стабильность заголовков для вспомогательных технологий без раздувания DOM на всей странице. Когда пользователь переходит к заголовку H2 любого поста через навигацию по заголовкам, скринридер инициирует прокрутку страницы, что, в свою очередь, раскроет тело поста на месте.
Жизнеспособность этого решения зависит от момента загрузки следующей порции постов. Дополнительным улучшением может стать заголовок-сигнальный маркер «Загрузить больше постов», видимый только для скринридеров (аналогично предложенному в вашем PR «области загрузки»), расположенный в нижней части списка загруженных постов. Когда этот заголовок появляется в поле зрения или выбирается из ротора заголовков, загружается следующая порция постов, а завершение загрузки объявляется через сообщение с атрибутом aria-live=polite.