Home > 웹 콘텐츠 신기술 제작기법 > 접근성 있는 Flash 제작기법 > Flash 접근성 지원 프로그래밍 지침 >
읽는 순서의 설정
Flash 무비를 읽는 순서는 논리적이어야 한다.
국가표준 항목 3.1에 따르면, 웹 콘텐츠는 화면에 표시되는 구성요소의 나열 순서와 보조 기술을 통하여 전달되는 정보의 순서가 일치하여야 한다. 만일 이 순서가 일치하지 않거나 논리적으로 상이할 경우에는, 웹 콘텐츠를 화면을 통하여 인지하는 사람과 보조 기술을 통하여 인지하는 사람 간에 차이가 발생한다.
또한 국가표준 항목 2.4에 따르면, 키보드로 Flash 콘텐츠 구성요소 간을 이동할 때, 논리적 이동 순서가 화면에 나타난 순서와 일치하여야 한다.
(1) 무비의 화면구성 요소를 읽어주는 순서는 논리적이어야 한다.
Flash로 생성된 무비를 화면 낭독 프로그램을 이용하였을 때에 읽는 순서는 접근성 설계에 있어서 매우 중요한 일이다. Flash 무비의 요소들을 읽는 순서는 화면 왼쪽 상단에서 화면 오른쪽 아래 방향이라는 전통적인 기준을 따르지 않는다. 따라서 순서가 뒤바뀐 내용을 화면 낭독 프로그램을 통하여 읽고 이를 이해하기는 매우 어렵다.
예를 들어 아래 예제의 Flash 콘텐츠는 3줄로 버튼을 늘어놓아 키보드를 형상화 한 것이다. 언뜻 보기에는 알파벳 순서에 따라 초점이 버튼으로 이동할 것이라고 생각하기 쉬우나, 실제로는 (b)의 번호 순서대로 초점이 이동한다.

[그림] 콘텐츠의 초점 이동 순서에 관한 예제(한국 Adobe 제공)
따라서 화면에 보이는 위치와 초점이 이동하는 순서를 일치시키기 위해서는 초점의 이동 순서를 결정하는 과정이 필요하다.
초점이 화면 구성요소 간을 이동하는 순서를 제어하는 방법은 아래와 같다.
가) ActionScript의 이용방법 초점이 구성요소 간을 이동하는 순서를 정교하게 제어할 수 있는 방법으로 ActionScript의 .tabindex 프로퍼티를 사용하는 것이다.ActionScript에서 초점이 이동하는 순서와 Tab 키에 의한 이동 순서는 동일하다. 그러나 ActionScript를 이용하여 무비를 이동하는 순서를 제어하고자 할 때에는 무비 내의 텍스트 필드 및 화면 표시를 위한 요소들을 포함한 모든 인스턴스(instance)들은 .tabindex 목록에 포함되어야 한다.
초점이 이동하는 순서를 제어하기 위하여 스테이지의 모든 인스턴스는 인스턴스 네임(instance name)을 가지고 있어야 한다. 인스턴스 네임을 가져야 하는 인스턴스는 텍스트, 무비클립, 버튼 심볼 뿐 아니라 무비가 실행되는 동안 사용되는 모든 컴포넌트를 포함한다.
정적 텍스트(static text)에는 인스턴트 네임을 부여할 수 없다. 따라서 정적 텍스트 인스턴스는 이동하는 순서를 초기 설정으로 돌아가게 한다.
ActionScript를 이용하여 이동하는 순서를 제어하기 위해서는 동적 텍스트(dynamic text) 필드를 이용해야 한다. 동적 텍스트를 사용하면 전체 파일 크기가 커지는 단점이 있다.
tabindex 목록은 무비가 실행되는 동안 사용되는 모든 인스턴스를 포함해야 한다. 여기에는 화면에 나타나지 않는 요소, 오프스테이지(offstage)에 있는 요소, 다른 인스턴스에 가려진 모든 요소가 포함된다. 만일 어떤 요소가 화면 낭독 프로그램 사용자에게 불필요할 경우에는 이 요소의 visible 프로퍼티를 '거짓'으로 설정하거나 .silent 프로퍼티를 '참'으로 설정한다. 뿐만 아니라 무비가 시작할 때에는 보이지 않으나 나중에 나타나는 요소들도 .tabindex 목록에 포함되어야 한다.
일련의 자식 SWF 파일을 부모 무비에 로딩하는 경우, .tabindex 값을 자식 무비클립에 수록하여야 한다. 그러나 목록에서 각각의 자식 SWF 파일로 초점이 이동하는 순서는 서로 달라야 한다. 예를 들어 두 개의 자식 무비가 부모 무비에서 사용되고, 각 무비가 .tabindex값이 각각 1, 2, 3인 3개의 요소를 가지고 있다고 하면, 화면 낭독 프로그램은 첫 번째 로드한 무비의 첫 번째 값을 읽어주며, 두 번째 로드한 무비의 첫 번째 값을 읽어준다. 이어서 화면 낭독 프로그램은 첫 번째 무비클립의 두 번째 값을 읽어주며, 이어서 두 번째 무비클립의 두 번째 값을 읽어준다. 따라서 화면 낭독 프로그램이 첫 번째 무비를 로드하여 콘텐츠를 읽어주고, 이어서 두 번째 무비의 콘텐츠를 읽어줄 경우, 첫 번째 무비의 .tabindex 값이 1, 2, 3이라면, 두 번째 무비의 .tabindex 값은 앞의 수치와 다른 값( 예를 들면 4, 5, 6) 으로 설정하여야 한다. 이 값은 순차적일 필요는 없으나 서로 달라야 한다.
나) 오프스테이지의 이용방법 동적인 Flash 콘텐츠의 경우에 읽는 순서를 사전에 결정하는 것은 매우 어렵다. 흔한 경우는 아니지만 동적 Flash 콘텐츠는 오프스테이지에 단일 컬럼의 콘텐츠를 여벌로 구성하여 해결할 수 있다. 온스테이지(onstage) 콘텐츠는 화면 낭독 프로그램이 읽어주지 못하게 접근할 수 없도록 한다. 여벌의 콘텐츠는 컬럼으로 구성하여 읽는 순서에 관계가 없는 요소 간을 이동하지 않도록 해야 한다.
이 방법은 두 가지 문제점이 있다. 첫째는 무비 내에 포함되는 객체의 수를 증가시켜 파일 크기를 키우고 무비의 성능을 떨어뜨린다는 점이다. 두 번째는 화면 확대 프로그램 사용자에게 심각한 혼란을 야기 시킬 수 있다는 점이다. 화면 확대 프로그램은 스테이지의 요소들을 확대할 뿐 아니라 이들을 화면의 중앙에 보이도록 한다. 그런데 온스테이지 콘텐츠가 접근할 수 없도록 되어 있기 때문에 오프스테이지의 콘텐츠에 초점이 주어져 화면 확대 프로그램 사용자로 하여금 혼란을 야기하게 한다. 따라서 이 방법은 화면 확대 프로그램을 사용할 경우에 적합하지 않다. 그러나 화면 낭독 프로그램 사용자에게는 매우 유용한 방법이다.
Flash 콘텐츠는 화면 낭독 프로그램을 사용하고 있는가를 자동으로 파악할 수 있다. 따라서 화면 낭독 프로그램을 사용하고 있는 경우에만 오프스테이지를 이용한 읽는 순서 제어 방법을 사용하도록 할 수 있다. 그러나 화면 낭독 프로그램과 화면 확대 프로그램을 동시에 사용하는 경우에는 달리 대책이 없다.
화면 낭독 프로그램이 사용되는지를 자동으로 확인하기 위해서 Flash가 지원하는 MSAA를 이용한다. Accessibility.isActive() 메서드는 화면 낭독 프로그램이 실행 중이고, Flash 콘텐츠에 초점이 제공되었을 때에 결과치가 '참'이 된다. 중요한 점은 이 메서드가 무비의 실행초기에는 호출결과를 '거짓'으로 응답하기도 하므로 Flash 무비의 버튼을 누를 때 호출되도록 ActionScript로 작성하는 것이 바람직하다.
Accessibility.Active()의 리턴 값이 '참'이면 화면에 나타난 콘텐츠는 접근이 불가능하다. 이렇게 만드는 가장 쉬운 방법은 모든 화면상의 콘텐츠를 하나의 무비클립으로 구성하고, .silent 프로퍼티를 '참'으로 만드는 것이다. .silent 프로퍼티를 사용하는 것이 무비클립의 표시여부(visibility)를 변경하는 것보다 좋다. 그 이유는 화면 낭독 프로그램 사용자들과 온스테이지 콘텐츠를 볼 수 있어야 하는 일반 사용자들이 공동으로 작업하는 경우도 있기 때문이다.
화면에 표시되지 않는 콘텐츠는 단일 컬럼으로 로드된다. 이 컬럼은 무비의 높이와 일치할 필요는 없다. 중요한 점은 온스테이지의 변화에 대응하여 오프스테이지의 콘텐츠도 갱신되어야 한다는 점이다.
웹의 힘은 그것의 보편성에 있다. 장애에 구애없이 모든 사람이 접근할 수 있는 것이 필수적인 요소이다.
(The power of the Web is in its universality, Access by everyone regardless of disability is an essential aspect.)
팀 버너스 리 경 - 웹의 창시자 (Tim Berners - Lee , W3C Director and inventor of the World Wide Web)