Как заставить программу чтения с экрана перестать читать и читать разные материалы
Я написал сайт, который использует jQuery для отображения модального всплывающего окна. Он по существу охватывает всю видимую область экрана с наложением, а затем показывает DIV, который содержит фактическое всплывающее окно поверх наложения. Одно из требований к этому проекту связано с доступностью.
Когда страница загружается, программа чтения с экрана начинает считывание с верхней части страницы. Когда пользователь нажимает на определенную ссылку, мы показываем модальный диалог. Мой вопрос: как мне прервать чтение чтения с экрана основной части сайта и сообщить ему, чтобы начать чтение диалогового текста?
Мой модальный контейнер завернут в div следующим образом:
<div id="modalcontainer" tabindex="0" class="popup" role="dialog" aria-labelledby="dialog-label" >
jQuery, который запускает модальный, выглядит следующим образом:
$("#modalLink").click(function (e) {
e.preventDefault();
$("#modalcontainer").center();
$("#modalcontainer").show();
$("#closeBtnLink").focus();
$("#wrapper").attr('aria-disabled', 'true');
});
"closeBtnLink" - это кнопка закрытия в модальном диалоговом окне. Я бы подумал, что установка фокуса на это даст указание читателю экрана начать чтение из этого элемента.
Элемент "обертка" - это СИБИЛИРОВАНИЕ модального диалога. По предложению другого пользователя SO по разным причинам я устанавливаю "aria-disabled = true" в элементе-оболочке, который содержит всю страницу. Модальный диалог существует как родственный друг за пределами этого контейнера.
Моя главная цель здесь - заставить читателя экрана читать содержимое моего модального элемента DIV, когда они нажимают на определенную ссылку. Любая помощь будет оценена.
Ответы
Ответ 1
Это ваша ответственность как разработчик представить содержимое страницы таким образом, чтобы он читался для чтения с экрана.
из http://www.anysurfer.be/en/index.html:
- Используйте правильные HTML-теги для структурирования ваших документов. Поступая таким образом, вспомогательные технологии могут трансформировать заголовки, абзацы, списки и таблицы в шрифт Брайля или речь понятным образом.
- Убедитесь, что веб-сайт также работает без использования мыши. В большинстве ситуаций никаких специальных действий не требуется, за исключением случаев, когда, например, вы используете раскрывающиеся меню. Этот конкретный ориентир имеет большое значение для посетителей, которые могут использовать клавиатуру.
- Вы можете сделать ваши аудио- и видеофрагменты доступными для посетителей с аудиторией или визуальным ограничением, добавив субтитры или предложив транскрипцию.
- Никогда не используйте только цвета для передачи структурной информации. Сообщение "Поля красного цвета обязательны для использования не для слепого человека или кого-то, кто является дальтоником.
- Обновляемый шрифт Брайля не может отображать изображения. Поэтому вы должны добавить короткие описания для изображений и графических кнопок. Они не появляются на экране, но их подхватывает программное обеспечение для чтения с экрана, используемое слепыми и слабовидящими.
- Использование технологий, таких как Flash и JavaScript, должно быть хорошо рассмотрено. Более того, тяжелая анимация и мерцание очень тревожат для людей, страдающих дислексией или эпилепсией.
Но в конечном итоге ответственность читателя экрана что он останавливается и запускается, когда это имеет смысл для пользователя, если не возможно, пользователь должен приостановить работу самого читателя.
Из-за большого разнообразия читателей экрана, что вы спрашивают, кажется совершенно невозможным.
Ответ 2
Это можно сделать с помощью ARIA role="dialog"
. вам придется изменить этот код для вашего примера, это будет vanilla js, так что ваш, вероятно, будет короче/проще через jQuery.
HTML:
<div role="dialog" aria-labelledby="myDialog" id="box" class="box-hidden" tabindex="-1">
<h3 id="myDialog">Just an example.</h3>
<button id="ok" onclick="hideDialog(this);" class="close-button">OK</button>
<button onclick="hideDialog(this);" class="close-button">Cancel</button>
</div>
JavaScript:
var dialogOpen = false, lastFocus, dialog, okbutton, pagebackground;
function showDialog(el) {
lastFocus = el || document.activeElement;
toggleDialog('show');
}
function hideDialog(el) {
toggleDialog('hide');
}
function toggleDialog(sh) {
dialog = document.getElementById("box");
okbutton = document.getElementById("ok");
pagebackground = document.getElementById("bg");
if (sh == "show") {
dialogOpen = true;
// show the dialog
dialog.style.display = 'block';
// after displaying the dialog, focus an element inside it
okbutton.focus();
// only hide the background *after* you've moved focus out of the content that will be "hidden"
pagebackground.setAttribute("aria-hidden","true");
} else {
dialogOpen = false;
dialog.style.display = 'none';
pagebackground.setAttribute("aria-hidden","false");
lastFocus.focus();
}
}
document.addEventListener("focus", function(event) {
var d = document.getElementById("box");
if (dialogOpen && !d.contains(event.target)) {
event.stopPropagation();
d.focus();
}
}, true);
document.addEventListener("keydown", function(event) {
if (dialogOpen && event.keyCode == 27) {
toggleDialog('hide');
}
}, true);
источник: http://3needs.org/en/testing/code/role-dialog-3.html
больше чтения: http://juicystudio.com/article/custom-built_dialogs.php
Ответ 3
Можете ли вы использовать регионы ARIA Live? https://developer.mozilla.org/en/ARIA/Live_Regions
Затем в Javascript во время модального отображения обменивайте регионы напористым и выключенным.
Ответ 4
Я столкнулся с одной и той же проблемой и решил с помощью
- создал еще один div (#message) внутри модальной контейнерной оболочки для размещения всего сообщения
- И установите атрибут aria-labelledby кнопке закрытия, чтобы указать на контейнер #message
Ответ 5
aria-hidden = "true" заставит читателей экрана не воспринимать этот элемент и его контент, а это значит, что он не будет считан.
aria-label установит текст, который будут воспринимать вспомогательные технологии (устройства чтения с экрана и т.д.).
http://www.w3.org/TR/wai-aria/states_and_properties