Появляется стандарт для решения именно такой проблемы: ARIA (Accessible Rich Internet Applications).Это все еще рабочий проект, но поддержка начинает появляться в последних программах чтения с экрана (JAWS 9, последние версии NVDA) при использовании с последними браузерами (IE 9, Firefox 3.6 (частичная версия) и 4.0, Chrome).
В этом конкретном случае взгляните на aria-label и aria-labelledby .Это атрибуты, которые будут добавлены к элементу BODY в виджете TinyMCE - или к IFRAME, в зависимости от того, какой из этих двух пунктов на самом деле фокусируется, когда пользователь вводит данные.Таким образом:
<body aria-label="Edit document">
Атрибут aria-label просто указывает строку, которая служит меткой.Aria-labelledby (обратите внимание на две буквы L согласно британскому правописанию) работает как традиционный элемент LABEL в обратном порядке.То есть вы передаете ему идентификатор:
<body aria-labelledby="edit-label">
И тогда в коде будет другое место:
<label id="edit-label">Edit document</label>
Это не обязательно должен быть элемент LABEL, вы можете использовать SPAN или что-то еще, но LABEL кажется семантически приемлемым.
Атрибуты ARIA не будут проверяться в HTML 4 или XHTML DTD.Тем не менее, они будут проверяться в соответствии с HTML 5 (сам еще находится в разработке).Если проверка важна для вас при более старом DTD, вы можете добавить атрибуты программно, используя JavaScript, когда страница загружена.
В идеале, если у вас уже есть видимая метка для виджета, вам следует использовать aria-помечать, чтобы предотвратить избыточность.Однако я понятия не имею, будет ли это работать через границы документа.То есть, если BODY находится в IFRAME, а видимая метка определена в родительском документе IFRAME, я не знаю, будет ли он работать.Браузер / программа чтения с экрана может рассматривать оба документа как отдельные документы, которые не общаются друг с другом.Вы должны будете экспериментировать, чтобы узнать.Но если окажется, что они не работают, попробуйте http://www.w3.org/TR/wai-aria/states_and_properties#aria-hidden. Таким образом, в родительском документе:
<label aria-hidden="true">Edit document</label>
И в документе TinyMCE:
<body aria-label="Edit document">
Атрибут aria-hidden предотвратит чтение метки в родительском документе, и его место займет атрибут aria-label в дочернем документе (который не виден).Вуаля, виджет, помеченный как видимый, так и звуковой, без избыточного чтения.
Если вы используете скрытую арию таким образом, будьте очень осторожны, чтобы скрытый вами бит (или эквивалент) всегда был доступен для чтениякое-где еще.
Это решение будет работать только для людей, использующих веб-браузеры и программы чтения с экрана, которые поддерживают ARIA.Людям со старыми программами чтения с экрана или браузерами не повезет, о чем подробно говорится в недавней статье A List Apart, Доступность WAI ARIA .Автор обосновывает предпочтение традиционным семантическим HTML-решениям, когда это возможно;но в твоем случае я не думаю, что у тебя есть другой выбор.По крайней мере, добавление атрибутов ARIA позволит вам обоснованно заявить, что вы проявили должную осмотрительность и приложили все усилия, чтобы сделать его максимально доступным.
Удачи!
Примечание для будущих читателей: ссылки на спецификацию ARIA, приведенные здесь, относятся к рабочему проекту сентября 2010 года.Если с тех пор прошло более нескольких месяцев, проверьте последние спецификации.