1.3.5Poziom AA

Określenie przeznaczenia pola

Identify Input Purpose

Programowo określ znaczenie pól zbierających dane o użytkowniku z listy Input Purposes, gdy technologia to obsługuje.

Komu pomaga
Pamięć i koncentracjaOgraniczenia ruchowe
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

Wersja
WCAG 2.2, wprowadzone w 2.1
Zasada / wytyczna
Postrzegalność / 1.3
Stan researchu
Draft AI. Bez przeglądu człowieka.
Redakcja artykułu
· wersja robocza
Na tej stronie

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.

WWW Pracownia, good, puste własne dane z polami pełnego nazwiska i e-mail

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.

WWW Pracownia, bad, te same puste pola własnych danych

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.

WWW Pracownia, control, dane osoby upoważnionej do odbioru

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

iOS Simulator Pracownia: good z pustymi polami własnego pełnego imienia i nazwiska oraz e-mail, przed fokusem i obserwacją.

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ć

  1. Ustal właściciela danych z kontekstu procesu; sama nazwa pola nie wystarcza. Przypisz zamierzone znaczenie do listy i zbadaj możliwości technologii.
  2. 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.
  3. W Flutterze odczytaj deklaracje oraz komunikat TextInput.setClient w hostowym teście. To kontrakt/mocked platforma, nie rzeczywisty iOS content type.
  4. 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.
  5. 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.

Powiązane kryteria