问题 1:损坏的标题导航 / DOM 操作

问题:回复帖子的元素在初始页面加载时未显示在文档对象模型 (DOM) 中,并且在屏幕阅读器通过它们之后会从 DOM 中移除,导致 Windows 屏幕阅读器失去对内容的访问,而 VoiceOver 可用于访问页面的工具受到限制。

具体行为:

● 尝试从主帖子导航到回复帖子时,回复帖子中使用的元素尚未在 DOM 中呈现,因此用户无法使用快速导航导航到任何回复帖子中的任何元素。

● 单个回复帖子仅在屏幕阅读器聚焦于它们时才在 DOM 中标记为 2 级标题,这要求用户导航页面上的每个元素才能到达回复帖子。

● ANDI 可访问性工具在元素交互后显示不断变化的标题结构。

● 尝试访问元素时,元素显示“从 DOM 中移除”错误。

● 屏幕阅读器失去对页面结构的持续视图。

平台详细信息:

● JAWS/NVDA:完全失败 - 根本无法访问回复标题

● VoiceOver:通过快速导航访问,但没有转子访问 - 因为 VoiceOver 通过读取直接页面来工作,用户可以使用快速导航键导航回复标题,但是屏幕阅读器聚焦的元素仅在转子内可访问。

为什么重要:屏幕阅读器用户无法完成阅读讨论回复的关键任务。这是参与讨论的完全障碍。

2 个赞

这些问题最早在 Screen Reader Accessibility issues 报告。请协助解决,我们整个社区的盲人和低视力用户都无法在讨论板上完成基本功能。

2 个赞

感谢您报告这些问题!

您知道这具体是在哪些主题上进行测试的吗?有一个共享的参考信息将有助于我们确保看到相同的问题,因为帖子内容有很多变体,我想确保我们将精力集中在正确的地方。

我们可以使用 try.discourse.org,或者如果这有帮助,我们也可以在这里的 Meta 上使用一个帖子作为参考。

您所说的“快速导航”是指元素列表吗?我可以确认,无论是在 NVDA 还是 VoiceOver 中,元素列表中只能访问当前在 DOM 中可用的内容,这对于视力正常的用户也是如此,而且这是 Discourse 工作方式的一个基本部分。为了替代手动分页,我们在用户向下/向上滚动页面时加载/卸载内容。

这通常是我听到有人提到“快速导航”时的预期,尽管我意识到跨应用程序的术语并不总是统一的。

我已经确认了 NVDA 和 VoiceOver 中的元素到元素导航工作正常,但我发现我们的“小型帖子”在主题中存在一个问题,可能会阻止导航继续,我将对此进行修复。

“小型帖子”是指主题状态更新,如置顶、关闭/打开、激活等。这些帖子的问​​题在于它们没有像普通帖子那样的内部标题,因此当它们出现在加载更多帖子之前的阈值时……用户可能会被阻止并只听到“没有下一个标题”。

像 ANDI 这样的自动化工具通常无法识别 Discourse 等 Web 应用程序中的 DOM 更改,它们通常是为静态页面等更简单的场景构建的。因此,虽然我们有时会使用这些工具来识别问题,但在更复杂的场景(如导航)中,我们必须专注于通过手动测试来重现问题。

我假设这同样是指元素列表?这是预期的,但也许我们可以考虑进行一些改进,使元素列表在 Discourse 中正常工作,我会与我们的工程师讨论此事以获取意见。

这是否也特指元素列表?如上所述,我已经测试了 NVDA 和 VoiceOver 的元素到元素导航,并且可以确认这可以正常工作……但如果存在它不起作用的特定上下文,我们可以进一步研究。

3 个赞

最新扩展核心课程/掌握君主主题 - APH Hive 讨论区

对快速活动进行了测试。

1 个赞

这是关于此事的快速更新,我一直在努力改进我们的地标,以便更好地导航元素列表。

在元素列表中导航标题将保持不变,但希望这能提供一个合理的替代方案。更改概述在此处:A11Y: improve landmark navigation and add aria-labels to post controls by awesomerobot · Pull Request #34421 · discourse/discourse · GitHub

简而言之,它的作用是:

  • 为 DOM 中的所有帖子提供地标区域
  • 添加一个地标区域,使其更清楚上面/下面有更多帖子——我们加载/卸载帖子,这样就不必手动分页了,如果一个主题一次在 DOM 中加载了数百个帖子,可能会导致性能问题。

在不影响所有人性能的情况下,使所有标题内容在 DOM 中都可访问将是一个非常复杂的变化,因此这是一个折衷方案。虽然不完美,但导航到“加载更多内容”区域将正确加载更多帖子,届时可以重新打开元素列表。

  • 我已更新,将帖子控件从导航区域更改为工具栏区域,这在语义上更准确,并允许地标区域列表专注于帖子。

  • 我在处理此事时还改进了帖子控件的标签。

因此,我们从主题中相当稀疏的地标元素列表开始

到一个更清晰地表示主题结构的内容

此更新应在本周某个时候上线。一旦这些更改可用,我很想听听您的反馈 @adress

4 个赞

您好 @awesomerobot,我们已受 APH 聘请就此问题提供可访问性咨询。我在下方提供了一些视频链接,其中展示了与此主题相关的主要问题。您将在第一个录制的视频中看到问题,从时间戳 08:36 开始。
Discourse Accessibility Audit JAWS
这与元素列表无关,而是我们称之为“快速键”或“快速导航”,通过它我们可以导航到下一个 HTML 元素类型(在本例中为标题)。

通过创建新的地标来修复此问题存在的问题是,地标通常保留给高级部分,因此对于屏幕阅读器用户来说,在地标之间导航页面的小部分会剥夺他们快速访问页面大区域(如导航横幅)的权限。这还违反了 WCAG A 级标准,创建了绕行障碍。

1 个赞

好的,感谢您提供更多细节!视频将非常有帮助——视频似乎受密码保护,您可以解锁它或将密码发送至 accessibility@discourse.org

1 个赞

是的,抱歉。这是包含嵌入式密码的链接。Video Conferencing, Web Conferencing, Webinars, Screen Sharing - Zoom
密码:.kBwdK3a

1 个赞

@awesomerobot,我是 Cody 的同事,也是一名辅助功能工程师。我检查了该存储库以诊断问题。您可能已经知道,核心问题似乎是 (1) 屏幕阅读器无法查看被隐藏帖子的内容,以及 (2) 帖子仅在 PostStreamViewportTracker 跟踪的用户视图内才会被取消隐藏。

在考虑潜在的修复方案时,我想优化两点:(1) 使屏幕阅读器能够通过标题导航每个帖子,以及 (2) 最大限度地减少对 Discourse 存储库的更改和对性能的影响。

我推荐的方法是为每个加载的帖子保留一个轻量级的包装器,其中包含用于标题导航的语义 H2,而帖子的主体内容保持隐藏。这使得标题对于辅助技术来说是稳定的,而不会增加整个页面的 DOM。当用户通过标题导航到达任何帖子的 H2 时,屏幕阅读器将触发页面滚动,进而取消隐藏帖子本身的内容。

此解决方案的可行性取决于何时加载下一批帖子。一个可选的改进是使用一个仅供屏幕阅读器使用的哨兵标题“加载更多帖子”(类似于您 PR 中提出的“加载更多区域”),该标题位于已加载帖子列表的底部。当此标题进入视图或从标题转盘中选择时,它会加载下一批帖子,并通过 aria-live=polite 消息宣布完成。

3 个赞

感谢您的反馈和建议,我们将在内部讨论并尽快给您更新!

1 个赞

这是我们目前在 A11Y: improve heading-to-heading nav, fix infinite scrolling for screenreaders by awesomerobot · Pull Request #34589 · discourse/discourse · GitHub 中正在进行的方法。

正如您所建议的,我们正在为所有帖子(无论是否隐藏)添加一些轻量级的仅供屏幕阅读器使用的标题,以及一个将触发加载更多帖子的标题,并伴随加载完成的公告。

这仍然是一个进行中的工作,所以还需要一些完善,但希望我们能尽快为大家提供此修复。

1 个赞

关于时间线预期的快速更新:我们将在接下来的一周左右进入预发布冻结期,我们的大部分团队将参加年度聚会……因此,这项更改可能需要几周时间才能完成。

2 个赞

您好!截至 11 月 5 日,我们已合并一项更新,预计将通过标题改进主题导航。更多详情请参见:

4 个赞