Live region
Също: aria-live, ARIA live region
Регион, управляван от ARIA, който обявява динамични промени в съдържанието на екранните четци, без да премества фокуса. Атрибутът `aria-live` прави даден раздел от DOM `polite` или `assertive` за известия в дървото за достъпност.
Live region е част от DOM, чието съдържание — когато се промени — се обявява автоматично на потребителите на екранни четци. Обявяването се извършва без преместване на фокуса, без да се налага потребителят да навигира до съответния елемент и без да се изисква опресняване на страницата.
Live regions са механизмът зад всяко известие от типа „Известие: Артикулът е добавен в количката”, зад всяко съобщение за валидиране на формуляр от типа „Грешка: Полето за имейл е задължително” и зад всяко актуализиране на броя резултати при търсене, което потребителят на екранен четец действително чува.
Основният атрибут
Най-простият live region е div с aria-live="polite":
<div aria-live="polite" id="status">
<!-- съдържанието тук ще бъде обявено при промяна -->
</div>
Когато JavaScript вмъква текст в #status, екранният четец обявява новия текст при следващата естествена пауза — без да прекъсва текущото четене на потребителя.
Polite и assertive
aria-live има две операционни стойности:
polite— изчаква потребителят да е в бездействие, след което обявява. Подходящо за повечето известия: потвърждения, брой резултати от търсене, съобщения за статус.assertive— прекъсва текущото четене и обявява незабавно. Използва се само за наистина спешни съобщения: критични грешки, предупреждения за изтекла сесия, чувствителни спрямо времето сигнали.
Прекомерната употреба на assertive е най-честата грешка при работа с live regions. Всяко дребно известие, което използва assertive, превръща екранния четец в постоянен прекъсвач и в крайна сметка кара потребителя да деактивира live region изцяло.
Алтернативи чрез ARIA роли
Няколко ARIA роли подразбират aria-live автоматично:
role="alert"→ поведение катоaria-live="assertive".role="status"→ поведение катоaria-live="polite".role="log"→ polite, с концептуалния намек за журнал само с добавяне (история на чат, изход на конзола).role="timer"→ polite, за таймери за обратно броене.
Изборът на роля често е по-ясен от директното задаване на стойност за aria-live — той документира предназначението на региона.
Чести грешки на практика
- Live region е добавен едновременно със съдържанието. ARIA обявява само промени в live regions, които вече са съществували в DOM. Вмъкването на
<div aria-live="polite">Заредено</div>като единичен блок не предизвиква обявяване — регионът и съдържанието са пристигнали едновременно. Решение: live region трябва да се намесе в DOM от зареждането на страницата, а съдържанието да се добави по-късно. - Твърде бързи актуализации. Многократното вмъкване на текст в live region в рамките на секунда изчиства предишното обявяване, преди да е приключило. Потребителят чува фрагменти. Трябва да се добавят throttle или debounce механизми.
- Управлявани от модален прозорец обявявания, при които е по-подходящо преместване на фокуса. Ако умисленото действие на потребителя е предизвикало съобщението, преместването на фокуса към него (или към свързан контрол) е по-добро решение от разчитането на live region. Live regions са предназначени за пасивни известия.
- Декоративен шум в live region. Live region, съдържащ освен съобщението още спинери за зареждане, икони и времеви маркери, кара екранния четец да прочита всичко при всяка актуализация. Съдържанието на региона трябва да се ограничи до самото съобщение.