WCAG 2.2.1 · A Seviyesi · ADA Title II

Zaman Sınırları ve ADA

Randevu tutma süreleri ve oturum zaman aşımları insanları dışarıda bırakabilir. WCAG 2.2.1 her sınır için kapatma, ayarlama ya da uyarıdan sonra uzatmadan birini ister.

Süre kullanıcının aleyhine dolarken

Ekran okuyucu, anahtar cihazı ya da ses denetimi kullanan bir kişi bir formu okumak, doldurmak ve göndermek için çoğu zaman daha fazla zamana ihtiyaç duyar. Bilişsel engeli olan biri bir belgeyi bulmak için zamana ihtiyaç duyabilir. Sabit ve sessiz bir zaman aşımı bunu başarısız bir görevle sonuçlandırır.

2.2.1 başarı ölçütü, içeriğin koyduğu her zaman sınırı için geçerlidir. Şunlardan en az biri doğru olmalıdır:

  • Kapatma: kullanıcı sınırla karşılaşmadan önce onu kapatabilir.
  • Ayarlama: kullanıcı sınırla karşılaşmadan önce onu en az varsayılanın on katına kadar değiştirebilir.
  • Uzatma: kullanıcı süre dolmadan uyarılır, basit bir eylemle uzatmak için en az 20 saniyesi vardır ve bunu en az on kez yapabilir.

Üç istisna vardır: alternatifi olmayan, gerçek zamanlı bir olayın gerektirdiği sınır, örneğin bir açık artırma; uzatmanın etkinliği geçersiz kılacağı zorunlu bir sınır; ve 20 saatten uzun sınırlar. Yalnızca içeriğin koyduğu sınırlar sayılır; yazarın denetimindeki sunucu tarafı zaman aşımları da buna dahildir.

Kamu hizmeti sitelerinde karşılaşılan sınırlar

  • Bir randevu saatini beş dakika tutan nüfus ya da ehliyet randevusu sayfası.
  • Bir belge yüklenirken süresi dolan mahkeme e-dosyalama oturumu.
  • Birkaç boşta dakikadan sonra zaman aşımına uğrayan fatura ödeme sayfası.
  • Birkaç saniye sonra kaybolan ve onay numarası içeren bir bildirim.

Kaçırılan sürenin gerçek bir bedeli olan sayfalar bunlardır: kaybedilen bir saat, reddedilen bir dosya, gerçekleşmeyen bir ödeme. Uzatma klavyeyle erişilebilir olmalı ve ekran okuyuculara duyurulmalıdır; yalnızca görsel bir geri sayım yeterli değildir.

Randevu tutmayı uyarın ve uzatın

En basit uyumlu örüntü, tutmayı uzatan bir düğmeyle birlikte verilen uyarıdır. Burada tutma süresi beş dakikadır ve uyarı bir dakika kala çıkar; bu, 20 saniyeden fazladır. Tekrarlanabilir.

Hatalı
setTimeout(releaseSlot, 5 * 60 * 1000);   // sessizce bırakılıyor
Doğru
const HOLD_MS = 5 * 60 * 1000, WARN_MS = 60 * 1000;
let warnTimer, releaseTimer;

function scheduleWarning() {
  warnTimer = setTimeout(() => {
    holdWarning.hidden = false;           // role="alert" kapsayıcı
    releaseTimer = setTimeout(releaseSlot, WARN_MS);
  }, HOLD_MS - WARN_MS);
}
extendBtn.addEventListener("click", async () => {
  clearTimeout(releaseTimer);
  holdWarning.hidden = true;
  await extendHold();                     // sunucu 5 dakika daha ekler
  scheduleWarning();                      // tekrarlanabilir
});
scheduleWarning();

Sınırı en baştan kapatma seçeneği

Zaman sınırı bir güvenlik gereksiniminden değil uygulamadan geliyorsa, ilk ekrandaki bir seçenek en güçlü yanıttır; çünkü hiç uyarıya gerek kalmaz.

Hatalı
<p>Bu kayıt formunu tamamlamak için 10 dakikanız var.</p>
Doğru
<form action="/enroll/start" method="post">
  <label>
    <input type="checkbox" name="no_time_limit">
    Daha fazla zamana ihtiyacım var: bu başvuru için süre sınırını kaldır
  </label>
  <button type="submit">Kaydı başlat</button>
</form>

Kaybolan bildirimler

Otomatik kapanan bir bildirim, okuma üzerine bir zaman sınırıdır. Kullanıcının ihtiyaç duyduğu bilgiyi taşıyorsa, kapatılana kadar ekranda tutun ya da aynı bilgiyi başka bir yerde de verin.

Hatalı
setTimeout(() => toast.remove(), 3000);   // izin numarası kayboldu
Doğru
toast.innerHTML =
  'PRM-4471 numaralı izin başvurusu alındı. <button type="button" id="t-close">Kapat</button>';
document.getElementById("t-close").addEventListener("click", () => toast.remove());
// Başvuru durum sayfasında da gösterilir.

Mobil uygulamalarda zamanlayıcılar

Bir bilet ya da rezervasyon uygulamasındaki tutma süresinde de aynı sorun vardır. Uyarı yalnızca çizilmemeli, VoiceOver ve TalkBack'e de sunulmalıdır.

SwiftUI:

Hatalı
.onReceive(timer) { _ in
    if remaining <= 0 { releaseSlot() }
    remaining -= 1
}
Doğru
.onReceive(timer) { _ in
    remaining -= 1
    if remaining == 60 { showExtend = true }
    if remaining <= 0 { releaseSlot() }
}
.alert("Rezervasyonunuzun süresi 1 dakika içinde doluyor", isPresented: $showExtend) {
    Button("Yerimi koru") { extendHold(); remaining += 300 }
}

Jetpack Compose:

Hatalı
LaunchedEffect(Unit) {
    delay(5 * 60 * 1000L)
    releaseSlot()
}
Doğru
var deadline by remember(holdId) {
    mutableStateOf(System.currentTimeMillis() + 5 * 60 * 1000L)
}
// Keyed on deadline: extending moves it, which restarts this effect
LaunchedEffect(deadline) {
    delay(deadline - 60 * 1000L - System.currentTimeMillis())
    showExtend = true
    delay(60 * 1000L)
    releaseSlot()
}
if (showExtend) {
    AlertDialog(
        onDismissRequest = {},
        title = { Text("Rezervasyonunuzun süresi 1 dakika içinde doluyor") },
        confirmButton = {
            TextButton(onClick = {
                extendHold(); deadline += 5 * 60 * 1000L; showExtend = false
            }) {
                Text("Yerimi koru")
            }
        }
    )
}

Nasıl test edilir ve neler ters gider

  1. Tüm zaman aşımlarını bulun: kodda setTimeout, setInterval, meta http-equiv="refresh", oturum ömrü ayarlarını ve randevu tutma mantığını arayın.
  2. Her biri için görevi başlatın ve bekleyin. Uyarı var mı, ne kadar sürüyor ve klavyeyle uzatılabiliyor mu?
  3. On kez uzatın ve onuncunun çalıştığını kontrol edin.
  4. Ekran okuyucunun uyarıyı, kullanıcıyı yazdığı yerden uzaklaştırmadan duyurduğunu kontrol edin.

Sık yapılan hatalar: 10 saniye gösterilen uyarı, yalnızca bir kez çalışan uzatma düğmesi, duyurusu olmayan görsel geri sayım ve güvenli biçimde uzatılıp uzatılamayacağına bakmadan bir sınıra "güvenlik" demek. Güvenlik sınırları zorunlu olabilir, ancak bu varsayılmamalı, doğru olmalıdır.

ADA açısı ve yayın öncesi liste

Kurumlar zaman aşımlarını çoğu zaman tedarikçi platformundan devralır ve değiştirilemeyeceğini varsayar. Bunu kabul etmeden önce tedarikçiden ayarlanabilir sınırlar isteyin.

Şunlar tamamsa yayına alın:

  • Her sınır kapatılabiliyor, varsayılanın on katına ayarlanabiliyor ya da en az 20 saniyelik bir uyarıdan sonra uzatılabiliyor.
  • Uzatma en az on kez çalışıyor.
  • Uyarı duyuruluyor ve klavyeyle erişilebiliyor.
  • Kaybolan bildirimlerdeki bilgi başka bir yerde de bulunuyor.

İlgili okuma: tedarikçiler ve üçüncü taraf içerik.

Kaynaklar

Standart sürümü: WCAG 2.1 (W3C Tavsiye Kararı, 5 Haziran 2018); Title II web kuralında adı geçen sürüm. Bu sayfa bilgilendirme amaçlıdır ve hukuki tavsiye niteliği taşımaz. Bağlayıcı metin için ADA yasasının ve yönetmeliklerinin resmî metinlerini esas alın ve size nasıl uygulandığını bir avukata sorun.

Corpowid, Gartner tarafından tanınan bir platformdur.

Corpowid, dijital erişilebilirlik alanındaki yenilikçi yaklaşımı ve performansı nedeniyle dünyanın önde gelen araştırma ve danışmanlık şirketlerinden biri olan Gartner tarafından takdir edilmiştir. Bu rozetler, yapay zeka destekli ve kapsayıcı web deneyimleri oluşturma konusundaki kararlılığımızı yansıtmaktadır.

Corpowid hakkında sorularınız mı var?

Bizimle iletişime geçin.

Size en kısa sürede geri dönüş sağlayacağız.