문제 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의 이 게시글을 참고용으로 사용할 수도 있습니다.

"빠른 내비게이션"이라고 말씀하시면서 특정 요소 목록(element lists)에 대해 보고하시는 것 같습니다. NVDA와 VoiceOver 모두 DOM에 현재 사용 가능한 콘텐츠만 요소 목록에서 접근할 수 있음을 확인했습니다. 이는 시력 있는 사용자에게도 동일하며, Discourse가 작동하는 방식의 근본적인 부분입니다. 수동 페이지네이션 대신, 사용자가 페이지를 아래/위로 스크롤할 때 콘텐츠를 로드/해제(offload)합니다.

"빠른 내비게이션"을 언급할 때 보통 제가 예상하는 상황은 이것입니다. 다만, 애플리케이션마다 용어가 항상 일관되지는 않다는 점을 이해하고 있습니다.

NVDA와 VoiceOver에서 요소 간 탐색이 정상 작동하는지 확인했습니다. 그러나 주제 내 "작은 게시글(small posts)"에서 탐색이 중단될 수 있는 문제를 발견했으며, 이를 수정할 예정입니다.

"작은 게시글"은 고정(pinned), 닫힘/열림, 활성화(actived) 등 주제 상태 업데이트를 의미합니다. 이러한 게시글의 문제는 일반 게시글과 달리 내부 헤딩이 없다는 점입니다. 탐색 중 더 많은 게시글이 로드되기 직전의 임계값에 도달했을 때, 사용자가 멈추고 "다음 헤딩 없음"만 듣게 될 수 있습니다.

ANDI와 같은 자동화 도구는 Discourse와 같은 웹 애플리케이션의 DOM 변경 사항을 인식하지 못하는 경우가 많습니다. 이러한 도구는 정적 페이지와 같은 단순한 시나리오를 위해 일반적으로 구축됩니다. 따라서 이러한 도구를 사용하여 문제를 식별하는 경우가 있긴 하지만, 탐색과 같은 더 복잡한 시나리오에서는 수동 테스트로 재현할 수 있는 부분에 집중해야 합니다.

이것도 요소 목록에 대한 언급으로 보입니다. 이는 예상된 동작이지만, Discourse에서 요소 목록이 작동하도록 할 수 있는 개선 사항이 있는지 고려해 볼 수 있으며, 엔지니어에게 의견을 구해 보겠습니다.

이것도 특정 요소 목록에서의 문제인가요? 위에서 언급했듯이 NVDA와 VoiceOver의 요소 간 탐색을 테스트했으며, 정상 작동하는 것을 확인했습니다… 하지만 작동하지 않는 특정 컨텍스트가 있다면 더 자세히 살펴볼 수 있습니다.

3개의 좋아요

최신 확장 코어 커리큘럼/마스터링 더 모나크 주제 - APH Hive 토론 보드

익스프레스 활동이 테스트되었습니다.

1개의 좋아요

이 주제에 대한 빠른 업데이트입니다. 요소 목록을 더 잘 탐색할 수 있도록 랜드마크를 개선하는 작업을 진행해 왔습니다.

요소 목록에서 제목을 탐색하는 방식은 변하지 않지만, 합리적인 대안이 될 수 있기를 바랍니다. 변경 사항은 다음 링크에서 확인할 수 있습니다: A11Y: improve landmark navigation and add aria-labels to post controls - Pull Request #34421 - discourse/discourse - GitHub

간단히 말해, 이 변경 사항은 다음과 같은 역할을 합니다:

  • DOM의 모든 게시물에 대해 랜드마크 영역을 제공합니다.

  • 상단/하단에 더 많은 게시물이 있음을 명확히 해주는 랜드마크 영역을 추가했습니다. 우리는 수동 페이지네이션을 사용하지 않도록 게시물을 로드/해제하되, 하나의 주제에 수백 개의 게시물이 한 번에 DOM에 로드되면 성능 문제가 발생할 수 있습니다.

    모든 제목 콘텐츠를 성능 저하 없이 DOM에서 접근 가능하게 만드는 것은 매우 복잡한 변경 사항이므로, 이는 일종의 절충안입니다. 완벽하지는 않지만, “더 많은 콘텐츠 로드” 영역으로 탐색하면 게시물이 올바르게 로드되고, 그 시점에 요소 목록을 다시 열 수 있습니다.

  • 게시물 컨트롤을 내비게이션 영역에서 도구 모음 영역으로 변경하는 업데이트를 했습니다. 이는 의미론적으로 더 정확하며, 랜드마크 영역 목록이 게시물에 집중할 수 있게 합니다.

  • 이 작업 중 게시물 컨트롤의 라벨링도 함께 개선했습니다.

따라서 주제 내에서 다소 빈약했던 랜드마크 요소 목록에서

주제 구조를 더 명확하게 나타내는 형태로 바뀌게 됩니다.

이 업데이트는 이번 주 중 언제든 적용될 예정입니다. 변경 사항이 사용 가능해지면 @adress 님의 피드백을 듣고 싶습니다!

4개의 좋아요

안녕하세요 @awesomerobot, 저희는 APH로부터 이 문제에 대한 접근성 자문을 의뢰받았습니다. 아래에 이 스레드와 관련된 주요 문제를 보여주는 몇 가지 비디오 링크를 제공했습니다. 첫 번째 녹화본의 타임스탬프 08:36부터 시작하는 부분에서 문제를 확인하실 수 있습니다.
Discourse Accessibility Audit JAWS
이것은 요소 목록과는 관련이 없으며, 우리가 ‘퀵 키(Quick Keys)’ 또는 '퀵 내비게이션(Quick Navigation)'이라고 부르는 기능과 관련이 있습니다. 이 기능을 사용하면 다음 HTML 요소 유형(이 경우 제목)으로 이동할 수 있습니다.

새로운 랜드마크(landmark)를 생성하여 이 문제를 해결하는 것의 문제는, 랜드마크가 일반적으로 상위 수준의 섹션에 할당된다는 점입니다. 따라서 화면 낭독기 사용자에게는 페이지의 작은 섹션 사이를 랜드마크로 이동하는 것이 내비게이션 배너와 같은 페이지의 큰 영역에 대한 빠른 접근을 방해하게 됩니다. 또한 이는 WCAG 표준 레벨 A를 위반하여 '바이패스 블록(Bypass Block)'을 생성하게 됩니다.

1개의 좋아요

좋아요, 추가 세부 정보 감사합니다! 영상이 큰 도움이 될 것 같습니다. 영상이 비밀번호로 보호되어 있는 것 같은데, 잠금을 해제하시거나 accessibility@discourse.org로 비밀번호를 보내주실 수 있을까요?

1개의 좋아요

네, 죄송합니다. 내장된 패스코드가 포함된 링크입니다. https://us02web.zoom.us/rec/share/45j1ymetOZ7KtgoCwVRrUc_wu3YnlsySMmpiXfDv0xaG76NCr4lSMONMtnD0Nkrc.coIPd9Sw2cp4bN8T
패스코드: .kBwdK3a

1개의 좋아요

안녕하세요 @awesomerobot, 저는 코디(Cody)의 동료이자 접근성 엔지니어입니다. 문제를 진단하기 위해 저장소를 살펴봤습니다. 이미 알고 계실 수 있지만, 핵심 문제는 (1) 가려진(cloaked) 게시물의 내용이 스크린 리더에서 볼 수 없고, (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 - Pull Request #34589%EC%97%90%EC%84%9C - discourse/discourse - GitHub 이 접근 방식을 기반으로 작업을 진행 중입니다.

제안해 주신 대로, 모든 게시글(가려진 상태든 아니든)에 경량 스크린리더 전용 헤딩을 추가하고, 더 많은 게시글 로딩을 트리거하는 헤딩과 로딩 완료 알림을 함께 추가하고 있습니다.

아직 진행 중인 작업(WIP)이므로 추가적인 세밀한 조정이 필요하지만, 곧 이 수정 사항이 모두에게 제공될 수 있기를 희망합니다.

1개의 좋아요

타임라인 관련 간단 업데이트: 다음 1주일 정도는 프리릴리스 동결 기간이며, 팀원 상당수가 연례 모임에 참석할 예정입니다. 따라서 이 변경 사항이 반영되기까지는 약 2주가 걸릴 것으로 보입니다.

2개의 좋아요

안녕하세요! 11월 5일부터 헤딩을 통한 토픽 내비게이션을 개선할 것으로 예상되는 업데이트를 병합했습니다. 자세한 내용은 다음과 같습니다:

4개의 좋아요

이 주제는 마지막 답변 후 30일이 지나면 자동으로 닫힙니다. 새로운 답변은 더 이상 허용되지 않습니다.