Co oznacza to kryterium
Użytkownik potrzebuje czasu na przeczytanie treści i wykonanie czynności. Każdy limit ustanowiony przez treść wymaga wyłączenia lub odpowiedniego dostosowania przed jego napotkaniem albo ostrzeżenia i prostej drogi wielokrotnego wydłużenia. Wyjątki wymagają konkretnego uzasadnienia; napis „sesja”, odliczanie i ogólne względy bezpieczeństwa nie wystarczają.
Więcej czasu pomaga osobom wolniej wpisującym dane lub korzystającym z przełączników, osobom słabowidzącym i niewidomym oraz osobom potrzebującym więcej czasu na czytanie, rozumienie i zapamiętanie instrukcji. Odbiór przez tłumacza lub język migowy również może wymagać czasu, zależnie od treści; nie przypisuje to bariery każdej osobie niesłyszącej.
Przykłady błędów i poprawek
Wyłącz limit, poczekaj i potwierdź
Własna „Pracownia” pokazuje zamówienie #1042 i punkt przy ul. Przykładowej 10. Użytkownik czyta adres i potwierdza punkt lokalnie, bez prawdziwego zamówienia, konta lub backendu. Good i bad mają te same dane, start, potwierdzenie i domyślny limit 12 sekund. Różnica: w good działa wyłączenie przed startem, w bad kontrolka jest nieaktywna i nie ma alternatywy.
- Problem
- Po 12 sekundach aplikacja blokuje Potwierdź punkt, bez kontroli czasu i bez uzasadnionego wyjątku.
- Skutek
- Osoba potrzebująca więcej czasu traci możliwość ukończenia czynności.
- Poprawka
- Zapewnij działające wyłączenie przed startem; po jego wyborze nie ustanawiaj tego limitu.
- W good przed startem użytkownik wybiera „Wyłącz limit czasu”. Na wybór ma nieograniczony czas.
- „Rozpocznij” uruchamia czynność bez timera. Po rzeczywistym oczekiwaniu ponad 14 sekund potwierdzenie pozostaje aktywne.
- Tap na „Potwierdź punkt” kończy czynność: „Punkt odbioru potwierdzony”.
- W bad po starcie i ponad 14 sekundach pojawia się „Czas minął”, a potwierdzenie jest nieaktywne.
Kadry z 2026-10-02: Flutter/Cupertino, iPhone 17 Simulator / iOS 26.5. Czas potwierdza osobny zegar XCTest, bez wnioskowania z samych PNG.


Stan po oczekiwaniu; dolna granica źródłowego pomiaru wyniosła 14,010114 s.


Ta sama czynność bez dostępnej kontroli; widoczna etykieta nie jest mechanizmem wyłączenia.

FAIL badanego warunku po co najmniej 14,004410 s; PASS testu oznacza odtworzenie bariery.
Ta sama czynność od początku bez terminu
Control nie ustanawia limitu. Po co najmniej 14,000081 s nadal pozwala potwierdzić ten sam punkt. To brak warunku zastosowania do tej czynności, a nie wyjątek zdarzenia rzeczywistego.

Kontrola pokazuje tę samą funkcję bez ustanowionego terminu.

Good bez użycia wyłączenia również wygasa; oddzielna próba potwierdziła działanie domyślnego timera. Podczas czynności wybór wariantu i reset są zablokowane, aby nie tworzyły bocznej kontroli czasu. Reset po wygaśnięciu rozpoczyna nową próbę, bez przedłużania starej. Wyłączenie dotyczy lokalnej funkcji, bez udawania zmiany polityki serwera. 12 sekund jest arbitralnym czasem edukacyjnego przykładu, bez rekomendacji długości sesji.
Kiedy obowiązuje i gdzie są wyjątki
Trzy alternatywy
Dla każdego ustanowionego limitu wystarczy jedna skuteczna droga. Musi obejmować rzeczywisty termin klienta i serwera; zmiana licznika na ekranie nie zmienia wygaśnięcia sesji.
| Droga | Warunek | Granica |
|---|---|---|
| Wyłączenie | Możliwe przed napotkaniem limitu. | Kontrolka dopiero po utracie funkcji jest za późno. |
| Dostosowanie | Przed napotkaniem limitu; szeroki zakres obejmuje co najmniej 10× domyślnej długości. | Dla 2 minut trzeba umożliwić co najmniej 20 minut; nie chodzi o dziesięć pozycji suwaka. |
| Wydłużenie | Ostrzeżenie przed końcem, co najmniej 20 sekund na prostą akcję i co najmniej 10 skutecznych wydłużeń. | 20 s jest oknem reakcji, bez narzuconej długości każdego dodatkowego okresu. |
Kolejne ostrzeżenia i okna reakcji muszą działać. Dziesięć wyświetleń przycisku nie dowodzi dziesięciu wydłużeń; ukryty twardy termin nie może podważać tej drogi. Dostępny przycisk lub objaśniona prosta komenda mogą ją realizować. Understanding preferuje usunięcie limitu, potem dostosowanie, potem kolejne okresy, bez obowiązku wdrażania wszystkich trzech.
Start przyciskiem nie usuwa limitu ustanowionego przez autora. Zakres obejmuje też przekierowanie po czasie, odświeżenie, zniknięcie jedynej informacji i narzucone tempo czytania. Natychmiastowe HTTP 3xx bez okresu oczekiwania nie jest takim limitem.
Wyjątki i sytuacje podobne
| Sytuacja | Warunek i granica |
|---|---|
| Zdarzenie rzeczywiste | Termin jest konieczną częścią zdarzenia odbywającego się równocześnie z odbiorem, nie w całości wytworzonego przez treść, bez możliwej alternatywy terminu. Aukcja z rzeczywistymi uczestnikami może pasować; syntetyczny timer tego nie dowodzi. |
| Niezbędność | Wydłużenie unieważnia czynność; usunięcie zasadniczo zmienia funkcję, której nie można osiągnąć inną zgodną drogą. Test szybkości reakcji może pasować; zwykły test wiedzy lub marketingowa pilność nie wystarczają. |
| Ponad 20 godzin | Sam limit jest dłuższy niż 20 godzin. Dokładnie 20 godzin lub suma krótkich sesji nie spełniają wyjątku. |
| Bezpieczeństwo | Własny timeout nadal jest w zakresie. Niektóre tokeny mogą mieć uzasadnioną niezbędność, bez zwolnienia całej sesji i logowania. |
| Zewnętrzne ograniczenie | Termin sieci lub odbiornika poza kontrolą autora nie jest jego limitem. Własny serwer i API organizacji pozostają w zakresie. |
| Trwała alternatywa | Znikający toast nie usuwa dostępu, jeśli ta sama informacja i funkcja pozostają w skrzynce. Sam zapis szkicu nie znosi krótkiego terminu dostępu do funkcji. |
| Kontrolowane media | Długość filmu, napisów lub kontrolowanej karuzeli sama nie dowodzi limitu, gdy użytkownik steruje odczytem, a treść pozostaje dostępna. Ruch ocenia się osobno. |
Demo nie realizuje dostosowania 10× ani wydłużenia z oknem 20 s. Nie ma zdarzenia rzeczywistego lub niezbędnego terminu. Ostrzeżenie o bezczynności, wznowienie po logowaniu, zachowanie danych i dostępność uwierzytelnienia mają własne wymagania. Samo spełnienie 2.2.1 ich nie potwierdza.
Platformy
Interpretacja AI z 2026-10-02 opiera się na WCAG 2.2 oraz informacyjnym WCAG2ICT Group Note 2025-12-11, bez ustalenia obowiązku prawnego. W adaptacji „treść” zastępuje dokument poza WWW lub oprogramowanie; progi pozostają te same.
| Środowisko | Warunek | Wykonanie źródłowe |
|---|---|---|
| WWW, także telefon | Terminy treści, skryptów i serwera autora. | Niewykonane. |
| Mobile | Limity ustanowione przez oprogramowanie. | Flutter/iOS Simulator, bez Androida. |
| Desktop | Np. czas przed zamknięciem edytowanej czynności. | Niewykonane. |
| Dokument | Limit samego dokumentu; termin odbiornika ocenia się w odbiorniku. Statyczny PDF nie tworzy tego warunku. | Niewykonane. |
| Kiosk/terminal | Timeout oprogramowania; sprzęt i zamknięta funkcjonalność wymagają osobnej oceny. | Niewykonane. |
W hybrydzie oceń część webową i natywną. Limit platformy poza kontrolą aplikacji nie staje się jej własnym limitem; funkcja systemu ma własny zakres oceny. Brak testu nie wyłącza wymagania.
Rozwiązania w technologiach
Fragmenty pokazują wybór przed startem i niewłączanie limitu po wyborze. W produkcie trzeba objąć serwer, wszystkie powiązane terminy, cykl życia i wznowienie. To kontekst do osadzenia w przepływie, bez kompletnej sesji i backendu. Oficjalne API sprawdzono 2026-10-02.
Android / Compose
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import kotlinx.coroutines.delay
@Composable
fun TimingChoice() {
var noLimit by remember { mutableStateOf(false) }
var started by remember { mutableStateOf(false) }
var expired by remember { mutableStateOf(false) }
Column {
Text("Bez limitu czasu")
Switch(checked = noLimit, onCheckedChange = { noLimit = it },
enabled = !started,
modifier = Modifier.semantics { contentDescription = "Bez limitu czasu" })
Button(onClick = { started = true }, enabled = !started) {
Text("Rozpocznij")
}
Text(if (expired) "Czas minął" else "Przeczytaj instrukcję")
}
LaunchedEffect(started) {
if (started && !noLimit) { delay(12_000L); expired = true }
}
}Switch ma nazwę zgodną z widoczną etykietą. LaunchedEffect jest anulowany po wyjściu z kompozycji. Dokumentacja sprawdzona; kompilacja i działanie niewykonane, bez uruchomienia Androida.
iOS / SwiftUI
import SwiftUI
struct TimingChoice: View {
@State private var noLimit = false
@State private var started = false
@State private var expired = false
var body: some View {
VStack {
Toggle("Bez limitu czasu", isOn: $noLimit).disabled(started)
Button("Rozpocznij") { started = true }.disabled(started)
Text(expired ? "Czas minął" : "Przeczytaj instrukcję")
}
.task(id: started) {
guard started && !noLimit else { return }
do { try await Task.sleep(nanoseconds: 12_000_000_000) }
catch { return }
expired = true
}
}
}Toggle ma tekstową nazwę; anulowanie oczekiwania nie ustawia expired. Dokumentacja i sygnatura SDK sprawdzone. Typecheck Xcode 27.0 / SDK Simulator 27.0, arm64/iOS 15: PASS. Runtime fragmentu i VoiceOver niewykonane; dowód pochodzi z Fluttera.
Flutter
import 'dart:async';
import 'package:flutter/cupertino.dart';
// W State, przed rozpoczęciem:
CupertinoButton(
onPressed: started ? null : () => setState(() => noLimit = true),
child: const Text('Wyłącz limit czasu'),
);
// W akcji rozpoczęcia, po zablokowaniu dalszej zmiany ustawienia:
if (!noLimit) timer = Timer(const Duration(seconds: 12), expire);
// W dispose oraz po ukończeniu: timer?.cancel();Pola started/noLimit/timer, expire i setState należą do State. Pełny ekran tworzy Timer tylko po starcie z limitem, anuluje po końcu/dispose, a Stopwatch chroni potwierdzenie przed spóźnionym callbackiem. Semantics.enabled opisuje nieaktywność. Flutter 3.44.9 / Dart 3.12.2: analiza, host, build i przebieg iOS PASS. Skrót nie był osobno uruchamiany; pump(Duration) jest wirtualnym czasem hosta.
React Native
import { useEffect, useState } from 'react';
import { Button, Switch, Text, View } from 'react-native';
export function TimingChoice() {
const [noLimit, setNoLimit] = useState(false);
const [started, setStarted] = useState(false);
const [expired, setExpired] = useState(false);
useEffect(() => {
if (!started || noLimit) return;
const timer = setTimeout(() => setExpired(true), 12000);
return () => clearTimeout(timer);
}, [started, noLimit]);
return (
<View>
<Text>Bez limitu czasu</Text>
<Switch
accessibilityLabel="Bez limitu czasu"
value={noLimit}
onValueChange={setNoLimit}
disabled={started}
/>
<Button
title="Rozpocznij"
onPress={() => setStarted(true)}
disabled={started}
/>
<Text>{expired ? 'Czas minął' : 'Przeczytaj instrukcję'}</Text>
</View>
);
}Cleanup usuwa timeout po wyjściu lub zmianie zależności. Nie restartuj terminu przy każdej zmianie tekstu. JavaScript w tle i polityka serwera wymagają rozwiązania w docelowej aplikacji. Dokumentacja sprawdzona; kompilacja i runtime niewykonane.
Jak sprawdzić
- Wypisz terminy klienta i usługi, start, długość, skutek i właściciela kontroli. Brak zegara na ekranie nie dowodzi braku limitu.
- Sprawdź wybraną drogę: wyłączenie przed startem lub ustawienie co najmniej 10× z pomiarem terminu. Wartość pola nie jest pomiarem.
- Dla wydłużenia zmierz od dostarczenia ostrzeżenia do ostatniej skutecznej reakcji: co najmniej 20 s, prosta akcja i co najmniej 10 skutecznych powtórzeń. Oddziel transport, ogłoszenie czytnika i termin serwera.
- Po domyślnym terminie spróbuj ukończyć czynność. Zapisz stany, zdarzenia i niezależny zegar. Sprawdź też domyślną ścieżkę bez użycia wyłączenia.
- Uzasadnij wyjątki przez cel i alternatywy. Reset nie jest przedłużeniem. Zbadaj wznowienie, tło i rzeczywistą dostępność kontroli w osobnym zakresie.
Weryfikacja i ograniczenia
Wykonanie źródła 2026-10-02 dotyczy lokalnej czynności na pierwszym planie, bez sesji serwerowej.
| Sprawdzenie | Wynik i granica |
|---|---|
| Analiza, host, build iOS | PASS, 16 testów hostowych; build końcowy 6,2 s. Host używa czasu wirtualnego. |
| XCTest | PASS, 2 testy, 0 failures, 121,271 s; good/bad/control, wygaśnięcie good, wczesny koniec, reset i wcześniejsza trasa. |
| Good/bad/control | Co najmniej 14,010114 / 14,004410 / 14,000081 s od potwierdzonego startu; good/control kończą, bad blokuje. |
| Domyślny good | Konserwatywny przedział wygaśnięcia 9,481355–13,525243 s obejmuje 12 s; nie potwierdza callbacku co do milisekundy. |
| Materiały | 8 PNG, 8 drzew, 22 odczyty i 11 wejść; AI obejrzała osiem kadrów. Tutaj wybrano siedem. |
| SwiftUI | Typecheck PASS, bez runtime. Compose/RN i inne platformy niewykonane. |
| Dostosowanie, wydłużenie i wyjątki | Opisane merytorycznie; bez działających demonstracji tych alternatyw. |
| VoiceOver, sprzęt, FKA/klawiatura tej trasy, człowiek | Niewykonane. Starsze testy klawiatury nie potwierdzają tej drogi. |
Dolna granica odejmuje koniec wcześniejszego odczytu od początku późniejszego na zegarze ProcessInfo.systemUptime XCTest. Zegar aplikacji wskazuje pomocniczo 12,002 s w bad i 12,004 s w domyślnym good; nie mieszano tych zegarów. To rzeczywiste oczekiwanie, bez fake time. Obserwacja kilkunastu sekund nie dowodzi nieskończonej sesji, tła, sieci lub wszystkich limitów.
Drzewo pokazuje nazwy i Disabled, bez dowodu wygłoszenia ostrzeżenia lub polityki serwera. Podobieństwo tekstu nie rozstrzyga trwałej alternatywy, a AI nie rozstrzyga samodzielnie niezbędności. Instrumentację, oczekiwania i warianty należy wyłączyć z wejścia niezależnego walidatora; uniwersalnego walidatora nie uruchomiono. Nie powstał film/audio, ponieważ trwałe stany i niezależny zegar dokumentują tę drogę. Brak filmu nie jest wynikiem VoiceOver.
Jak sprawdza Clearship
Metoda z 2026-10-08 i pomiary iOS z 2026-10-09 obserwują zmiany treści podczas około sześciu sekund czekania bez akcji. Analizator szuka zastąpienia lub zniknięcia informacji oraz ostrzeżenia z czasem i kontrolą wydłużenia. Pomiar kontrolny na Androidzie i iOS spełnił próg: po 6/6 usterek oraz 2 fałszywe alarmy na 44 poprawnych ekranach. Nie jest to pełne pokrycie limitów.
Wyłączenie i ustawienie czasu przed napotkaniem, długie limity, polityka serwera i skuteczność co najmniej dziesięciu wydłużeń pozostają poza wykonawcą. Rozpoznana kontrolka, możliwa trwała alternatywa, niejasna aktualizacja lub brak próbki wymagają oceny człowieka. Wynik bez znalezisk obejmuje tylko zbadane okna i nie ma zastosowania do pominiętych stanów.