Co oznacza to kryterium
Znaczenie pola, np. „pełne imię i nazwisko” albo „adres e-mail”, powinno być dostępne dla oprogramowania bez zgadywania z polskiej etykiety. Dotyczy to określonych informacji o osobie korzystającej z formularza, jeżeli technologia obsługuje ich oznaczanie.
Ustalony cel może umożliwiać znajome symbole i personalizację osobom z trudnościami pamięci lub koncentracji. Może też ograniczyć wpisywanie danych osobom z ograniczeniami ruchowymi. Research nie potwierdza rzeczywistego autofill; dostępna nazwa dla czytnika i purpose są różnymi informacjami.
Przykłady błędów i poprawek
W Pracowni użytkownik wpisuje swoje pełne imię i nazwisko oraz e-mail do zamówienia P-104. Para good/bad ma te same widoczne etykiety, typy klawiatury, puste pola i podgląd. Jedyna istotna różnica pary: good deklaruje właściwe hints/tokeny; bad ich nie deklaruje. Oznaczenie wariantu należy do fixture. Dane wpisywane w testach to Ala Przykladowa i ala@example.invalid; nie korzystano z rzeczywistych profili/kont.
| Przypadek | Problem / skutek | Poprawka / ocena |
|---|---|---|
| Własne dane, bad | Odbiornik musi zgadywać znaczenie mimo czytelnych etykiet i klawiatury e-mail. | Powiązać pełne nazwisko z name i e-mail z email/emailAddress. To własne odtworzenie braku purpose. |
| Własne dane, good | Programowo określone znaczenie dwóch pól. | W WWW sprawdzono DOM; mobilny native content type ma osobny zakres dowodu poniżej. Brak autofill nie zmienia odczytanego tokenu. |
| Dane innej osoby, control | Wygląd i brak hints podobny do bad, lecz inny właściciel danych. | Bez naruszenia 1.3.5 w tym scenariuszu; nie podpowiadać własnego profilu jako danych osoby trzeciej. |
| F107, przykład edukacyjny | Syntaktycznie poprawne email na polu pełnego nazwiska albo nieznane birthday zamiast bday. | Sprawdzić zgodność znaczenia i taksonomię, a nie tylko obecność atrybutu. To omówienie udokumentowanego błędu; tych błędnych tokenów nie uruchamiano w demonstracji. |
H98 jest wystarczającą techniką dla właściwych pól HTML, nie normatywnym nakazem używania jednego atrybutu w każdej technologii. F107 opisuje błędne wartości przy braku innej metody przekazania purpose. Nie twierdzimy, że te przykłady są najczęstsze.

Własna demonstracja Pracowni, 2026-10-04. Surowy obraz z rzeczywistego uruchomienia; daje kontekst, bez potwierdzenia odczytu czytnikiem.
Rzeczywisty JPEG IAB/macOS: good przed wpisaniem. Obraz daje kontekst; tokeny potwierdza DOM.

Własna demonstracja Pracowni, 2026-10-04. Surowy obraz z rzeczywistego uruchomienia; daje kontekst, bez potwierdzenia odczytu czytnikiem.
Rzeczywisty JPEG: bad przed wpisaniem; podobny wygląd i czytelne etykiety nie ujawniają braku purpose.

Własna demonstracja Pracowni, 2026-10-04. Surowy obraz z rzeczywistego uruchomienia; daje kontekst, bez potwierdzenia odczytu czytnikiem.
Rzeczywisty JPEG: control przed wpisaniem, celowo inny kontekst właściciela danych. Wszystkie trzy obrazy obejrzano przez AI; bez retuszu i bez generacji AI.
Natywny kontekst tych samych danych

Własna demonstracja Pracowni, 2026-10-04. Surowy obraz z rzeczywistego uruchomienia; daje kontekst, bez potwierdzenia odczytu czytnikiem.
Końcowy obraz pochodzi z próby XCTest PASS. Niewidoczny content type potwierdzają osobne, świeże gettery UIKit; podobny wygląd bad nie ujawnia braku celu. Kontrola zbiera dane innej osoby.
Kiedy obowiązuje i gdzie są wyjątki
Trzy przesłanki należy rozpatrywać łącznie: informacje są o użytkowniku treści, cel odpowiada pozycji normatywnej listy, a technologia obsługuje oznaczanie oczekiwanego znaczenia. „Wpisane przez użytkownika” nie oznacza „o użytkowniku”. Wyszukiwanie produktu, komentarz i dane osoby upoważnionej nie stają się takim polem tylko dlatego, że ktoś wpisuje je z klawiatury.
Lista obejmuje m.in. tożsamość i części nazwiska, konto/hasła, organizację i stanowisko, adres z częściami, kontakt, płatność i preferencje. Pełną listę odczytano; demonstracja wykorzystuje tylko name i email. street-address i address-line1 nie są zamienne przy różnych strukturach adresu; bday to data urodzenia, nie dowolna data. Nazwy celów WCAG opisują znaczenia — równoważne API innej technologii nie muszą używać tych samych literalnych tokenów. HTML przy użyciu H98 wymaga własnych prawidłowych tokenów, np. bday, a nie wymyślonego birthday.
Nawet pozycje takie jak transaction-amount wymagają ustalenia, że chodzi o informacje o użytkowniku; obecność nazwy na liście nie rozszerza zakresu na każde pole transakcji. one-time-code i końcowy token webauthn występują w nowszym HTML/API, lecz nie są automatycznie dodatkowymi celami normatywnej listy WCAG 2.2.
Przez pole wejściowe rozumiemy również właściwe select/textarea, nie tylko tag input. Programowe znaczenie pochodzi z danych autora dostępnych dla odbiorników i różnych sposobów prezentacji. Etykieta, accessibility name, type="email", keyboardType, placeholder i ID opisujące implementację same nie zastępują wyspecjalizowanego purpose. Heurystyczne rozpoznanie formularza przez menedżer danych także nie jest jego deklaracją.
Understanding dopuszcza dla pola łączącego dwa cele, np. login lub e-mail, jeden cel albo brak oznaczenia, gdy użyta technologia nie obsługuje wielu znaczeń. To konkretny przypadek wieloznacznego pola; nie uzasadnia pomijania purpose dla osobnego pola e-mail. W Compose można obecnie łączyć ContentType; w iOS jedna właściwość UITextContentType nie przyjmuje zestawu, a Flutter na iOS wykorzystuje pierwszy hint.
Wyłączenie lub brak działania autofill nie dowodzi braku purpose. W WWW form autocomplete="off" może współistnieć z indywidualnymi tokenami pól; w badanym DOM są one odczytywalne. Wartości on, off lub pusty atrybut same nie określają znaczenia. Brak celu poza normatywną listą albo brak obsługi w technologii jest granicą warunku, a nie błędem wymagającym dowolnych wymyślonych metadanych.
Platformy
Każdy wiersz: odczyt i interpretacja AI 2026-10-04, człowiek NOT-RUN. WCAG2ICT to Group Note z 2025-12-11, informacyjna interpretacja poza treścią webową. Nie jest podstawą deklaracji obowiązków prawnych lub zgodności z EN 301 549.
| Środowisko / ID | Podstawa / kryterium | Stan i warunek | Adaptacja, uzasadnienie i zakres testu |
|---|---|---|---|
WWW / web |
WCAG 2.2 / 1.3.5 | Dotyczy warunkowo: dane użytkownika, cel z listy, wsparcie technologii. | Bez zmiany; HTML udostępnia autocomplete. Wykonano rzeczywisty DOM i formularz w IAB na macOS; web w telefonie pozostaje WWW, tutaj NOT-RUN. |
Aplikacje mobilne / mobile |
WCAG 2.2 przez WCAG2ICT / 1.3.5 | Dotyczy warunkowo przy równoważnych znaczeniach obsługiwanych przez technologię. | Bez zmiany wymagania; nazwy purpose mogą być platformowe, np. UITextContentType. Wspólne Flutter/Cupertino i dedykowany iOS Simulator; Android i fizyczny iPhone NOT-RUN. |
Aplikacje desktopowe / desktop |
WCAG 2.2 przez WCAG2ICT / 1.3.5 | Dotyczy warunkowo według tych samych przesłanek. | Ustalić możliwości konkretnego API i odbiornika; brak builda/testu desktopowego, nie wyłączenie platformy. |
Dokumenty cyfrowe / document |
WCAG 2.2 przez WCAG2ICT / 1.3.5 | Dotyczy warunkowo dla formularzy z obsługą semantycznego purpose. | Technologia bez takich atrybutów jest poza warunkiem; zwykły statyczny dokument nie ma takich pól. Nie badano konkretnego PDF/formatu — nie orzekamy ogólnego wyłączenia PDF. |
Kiosk z zamkniętym interfejsem / other |
WCAG 2.2 przez WCAG2ICT / 1.3.5, komentarz o closed functionality | Dotyczy warunkowo; ustalić rzeczywiste możliwości programowe. | Przy braku programowego dostępu WCAG2ICT omawia precyzyjne etykiety i inne modalności własnych funkcji; nie zaliczamy samego napisu jako programowego purpose. Nie badano kiosku. |
Nie dotyczy badanego scenariusza: control zbiera imię i e-mail osoby trzeciej. Brak purpose w tej kontrolce nie narusza 1.3.5 przy opisanym kontekście; inne wymagania formularza nadal obowiązują.
Rozwiązania w technologiach
| Technologia / ID | Dokumentacja 2026-10-04 | Kompilacja | Działanie |
|---|---|---|---|
HTML / html-css |
Przegląd aktualnej specyfikacji, H98/F107/ACT | node –check demo.js PASS; HTML nie jest kompilowany | IAB DOM + interakcje PASS; rzeczywisty menedżer/autofill i personalizacja AT NOT-RUN |
Flutter / flutter |
API CupertinoTextField, AutofillHints, AutofillGroup i most iOS | Flutter 3.44.9 / Dart 3.12.2, analiza i build iOS PASS | Hostowy mock i natywna próba mają osobne wyniki poniżej; nie potwierdzają AT/OS autofill |
iOS / SwiftUI / swiftui |
API UITextInputTraits/UITextContentType i iOS overload textContentType | Fragment edukacyjny NOT-RUN | Osobna aplikacja SwiftUI NOT-RUN; nie przypisywać jej wyniku Fluttera |
Android / Jetpack Compose / jetpack-compose |
API Modifier.semantics/contentType, ContentType.EmailAddress | Fragment edukacyjny NOT-RUN | Android NOT-RUN zgodnie z zakresem; pole w Compose nadal wymaga dopasowania API do wersji projektu |
React Native / react-native |
Aktualna dokumentacja TextInput autoComplete/textContentType | Fragment edukacyjny / typecheck NOT-RUN | React Native NOT-RUN; API hints nie dowodzi reakcji dostawcy autofill |
HTML / CSS
<label for="email">E-mail</label>
<input id="email" name="email" type="email" autocomplete="email" />Label przekazuje nazwę, type ogranicza format i może wpływać na klawiaturę, autocomplete oznacza znaczenie. Dla wielu adresów rozważyć właściwe prefiksy section-*, shipping/billing i home/work; nie łączyć dwóch końcowych celów jako email username. Sprawdzać kolejność oraz dopasowanie znaczenia. Przykład ma własne HTML i JS, działa lokalnie bez wysyłania formularza.
Flutter
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
// W build, wewnątrz AutofillGroup; widoczna i powiązana etykieta osobno.
CupertinoTextField(
keyboardType: TextInputType.emailAddress,
autofillHints: const [AutofillHints.email],
);Na iOS pierwszy hint mapuje się na UITextContentType.emailAddress; na WWW na email, na Androidzie na platformowe hints. null wyłącza przekazywanie konfiguracji autofill tego klienta, pusty zestaw nie jest równoważny explicit purpose. Nie zakładać, że hint wymusi podpowiedź: zależy ona od OS, dostawcy, danych i konfiguracji. Demonstracja używa istniejącego CupertinoApp i ekranu, AutofillGroup z cancel przy dispose; nie dodano pakietów ani profili kont.
iOS / SwiftUI
import SwiftUI
struct ContactField: View {
@State private var email = ""
var body: some View {
TextField("E-mail", text: $email)
.keyboardType(.emailAddress)
.textContentType(.emailAddress)
}
}iOS overload przyjmuje UITextContentType, a overload macOS inny typ; sprawdzono właściwy wariant iOS, nie wywnioskowano go z pierwszej strony macOS. W UIKit równoważna właściwość to textContentType; dla pełnego nazwiska name. Etykieta i keyboardType pozostają osobnymi cechami.
Android / Compose
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.autofill.ContentType
import androidx.compose.ui.semantics.contentType
import androidx.compose.ui.semantics.semantics
@Composable
fun ContactEmail(value: String, onChange: (String) -> Unit) {
TextField(value = value, onValueChange = onChange,
modifier = Modifier.semantics { contentType = ContentType.EmailAddress })
}To minimalny fragment purpose, nie kompletny formularz: widoczny label i odpowiednią klawiaturę zapewnia otoczenie. Semantyczny contentType nie jest contentDescription. Dla pola rzeczywiście łączącego login/e-mail API dopuszcza Username + EmailAddress; nie ma potrzeby nakładać obu znaczeń na osobne pole.
React Native
import React, { useState } from 'react';
import { Text, TextInput, View } from 'react-native';
export function ContactEmail() {
const [email, setEmail] = useState('');
return (
<View>
<Text>E-mail</Text>
<TextInput
accessibilityLabel="E-mail"
value={email}
onChangeText={setEmail}
keyboardType="email-address"
autoCapitalize="none"
autoComplete="email"
/>
</View>
);
}autoComplete jest API wspólnym. Nie ustawiać równocześnie autoComplete i iOS textContentType, bo textContentType ma pierwszeństwo. accessibilityLabel nie zastępuje purpose. Fragmenty SwiftUI/Compose/RN są edukacyjne po przeglądzie dokumentacji, bez deklaracji kompilacji lub działania i bez obowiązku tworzenia trzech dodatkowych aplikacji.
Jak sprawdzić
- Ustal właściciela danych z kontekstu procesu; sama nazwa pola nie wystarcza. Przypisz zamierzone znaczenie do listy i zbadaj możliwości technologii.
- W WWW odczytaj rzeczywisty atrybut i właściwość DOM po renderze, powiązanie etykiety i typ. Sprawdź gramatykę tokenów i zgodność z celem. Porównaj good/bad/control, wpisz te same dane, pokaż podgląd, przełącz i zresetuj. Form off nie usuwa indywidualnych metadanych.
- W Flutterze odczytaj deklaracje oraz komunikat TextInput.setClient w hostowym teście. To kontrakt/mocked platforma, nie rzeczywisty iOS content type.
- Na wskazanym iOS Simulator zainstaluj świeży Runner.app, uruchom każdą trasę, dotknij każdego pola i odczytaj getter aktywnego natywnego firstResponder. Oczekiwane: raw name/email (stałe UIKit .name/.emailAddress) w good, brak celowego purpose w bad/control, ta sama klawiatura w odpowiadających sobie polach. Porównaj świeżość native snapshot, wpisz dane przez XCTest, pokaż podgląd, sprawdź cykl, reset i fallback.
- Osobno zbadaj odbiornik purpose: personalizację AT lub systemowe podpowiedzi z wyłącznie syntetycznym profilem. Tego sprawdzenia nie wykonano; reakcja OS nie jest tutaj deklarowanym warunkiem zaliczenia DOM, a granica interoperacyjności natywnej pozostaje jawna.
Weryfikacja i ograniczenia
Historyczne wykonanie z 2026-10-04 rozdziela deklaracje autora, mock kanału, odczyt UIKit i rzeczywisty odbiornik purpose.
| Sprawdzenie | Wynik i granica |
|---|---|
| Wymaganie, lista celów i oficjalne API | Przegląd AI 2026-10-04; człowiek NOT-RUN |
| Web | 8 odczytów DOM/AX i 3 JPEG; good name/email mimo form off, bad/control null/empty; ręczne wpisanie/podgląd, cykl/reset/fallback PASS |
| Flutter host | Nowy test i zestaw 58 testów PASS, analiza PASS; serializacja hints i mock kanału, bez natywnego odbiornika |
| Flutter/iOS | Świeży build/install PASS; finalny XCTest 1 test / 0 failure / 110,022 s; 25 stanów, 56 wejść, 11 świeżych getterów, 3 PNG |
| UIKit firstResponder | Good raw name/email, bad/control null/empty; odpowiadające pola mają te same klawiatury 6/7; getter jest read-only, bez ustawiania content type |
| Personalizacja AT i systemowy autofill | NOT-RUN; nie dodawano rzeczywistych profili/kont i nie uznano ręcznego fill za autofill |
| SwiftUI, Compose, React Native, Android, człowiek | Właściwe kompilacje/runtime lub przegląd NOT-RUN |
Finalna obserwacja natywna była osobnym kanałem debug na Simulatorze, bez setterów, żądania fokusu i uruchamiania callbacków przez obserwatora. JSON przeniesiony do value narzędzia nie jest ekspozycją purpose dla VoiceOver. Świeżość gettera, marker purpose-v4-20261004, obliczone oczekiwania SDK, odrębny bundle ID, jawny xctestrun oraz pełne hashe wiążą końcowy wynik z wersją. Nie przenosi się tego sposobu obserwacji do dowolnej aplikacji klienta.
Wcześniejsze próby pozostają nieudane: host mylił klucz hints i konfigurację platformy; driver mylił typ klawiatury nazwiska oraz raw email z nazwą symbolu emailAddress. Trzecia próba wykonywała stare oczekiwanie mimo aktualnego źródła i zgodnych manifestów; przyczyna pozostała nieustalona. Same hashe nie potwierdzają załadowanego kodu. Finalny PASS nie zmienia tej historii; wcześniejsze obrazy good nie potwierdzają purpose ani zaliczenia prób. Startupy przerwane przed testcase i ograniczona rekonstrukcja pierwszej wersji również pozostają ograniczeniami.
ACT 73f2c2 bada składnię istniejącego autocomplete. Brak atrybutu albo on/off może być poza jej celami; PASS lub inapplicable nie potwierdza 1.3.5. Poprawny syntaktycznie token może mieć złe znaczenie. AX label/value i screenshot nie pokazują celu pola. AI nie powinna zgadywać właściciela danych z każdej etykiety name/email. UIKit getter i mock potwierdzają inne etapy mostu, bez pełnej interoperacyjności AT. Checker własnych oczekiwań nie jest zaślepionym walidatorem; niezależny walidator i człowiek pozostają NOT-RUN.
Jak sprawdza Clearship
Clearship rozpoznaje cel i właściciela danych z etykiet oraz tekstu ekranu. Na Androidzie porównuje je z hints odczytanymi przez testową usługę autouzupełniania sondy. Sygnał autofill-1 zbiera deklaracje, a nie wypełnia dane użytkownika. Brak żądania dla pola, niejasny cel lub podmiot trafia do człowieka.
Metoda input-purpose-1 spełniła próg pomiaru kontrolnego Androida w opisanym zakresie. Katalog nadal określa całą ocenę jako wymagającą człowieka. Na iOS sonda produktu nie ma sygnału textContentType; wynik kontrolny jest poniżej progu. Getter debug własnej demonstracji nie jest tą sondą. Nie badamy skuteczności autofill, wartości pól, autocomplete w WebView ani znaczenia całego procesu przez sam słownik. Brak sygnału nie potwierdza poprawnego purpose.