Библиотека ally.js предоставляет набор инструментов для обеспечения доступности веб-приложений. Одним из ключевых аспектов доступности является уведомление пользователей о динамических изменениях контента с помощью ARIA live regions. Эти регионы позволяют скринридерам автоматически информировать пользователей о событиях на странице без необходимости фокусирования на изменяемом элементе.
ARIA live — это атрибут, который сообщает вспомогательным технологиям, что содержимое элемента может обновляться динамически. Основные параметры:
aria-live="off" — обновления игнорируются.aria-live="polite" — уведомления произойдут после
завершения текущих задач скринридера.aria-live="assertive" — уведомления произойдут
немедленно, прерывая текущие чтения.Другие связанные атрибуты:
aria-atomic: определяет, следует ли
передавать скринридеру весь контент элемента целиком (true)
или только изменённые части (false).aria-relevant: указывает тип
изменений, которые должны быть анонсированы (additions,
removals, text).Библиотека ally.js упрощает работу с ARIA live, предоставляя утилиты для создания динамических уведомлений, избегая необходимости вручную управлять DOM и атрибутами.
ally.announce(message, mode)
Позволяет программно отправить сообщение в ARIA live region. Параметры:
message — строка для анонса.mode — необязательный параметр, указывающий уровень
важности: "polite" или "assertive".ally.announce("Загрузка завершена", "polite");
При вызове метод автоматически создаёт скрытый div с
соответствующими атрибутами ARIA и удаляет его после анонса.
Создание кастомных live regions
Можно задать собственный элемент как регион для анонсов:
const region = document.getElementById("custom-live-region");
ally.announce("Файл успешно загружен", "assertive", region);
Это позволяет интегрировать анонсы в уже существующую структуру страницы без создания новых элементов.
ally.announce,
чтобы скринридеры синхронизировались с визуальным состоянием.В React или Vue можно оборачивать
вызовы ally.announce в хуки или методы жизненного цикла
компонентов:
import ally from 'ally.js';
import { useEffect } from 'react';
function FileUpload({ status }) {
useEffect(() => {
if (status === 'success') {
ally.announce("Файл загружен успешно", "polite");
} else if (status === 'error') {
ally.announce("Ошибка загрузки файла", "assertive");
}
}, [status]);
return null;
}
Такой подход позволяет синхронизировать анонсы с внутренним состоянием компонентов и обеспечивает предсказуемое поведение для пользователей скринридеров.
Для проверки ARIA live region можно использовать:
polite,
assertive) управляет приоритетом уведомлений.ARIA live в связке с ally.js обеспечивает надежный способ сделать динамические веб-приложения доступными, минимизируя ручное управление DOM и гарантируя предсказуемое поведение для пользователей вспомогательных технологий.