Signatur
Beschreibung
Die schreibgeschützte Eigenschaft postalCode des Interfaces ContactAddress gibt eine Zeichenkette zurück, die den Code enthält, den ein Land oder eine Region für die Postzustellung verwendet. Das ist in Deutschland die Postleitzahl (PLZ), in den USA der ZIP-Code, im Vereinigten Königreich der Postcode, in Indien der PIN-Code.
ContactAddress-Objekte bekommst du nicht direkt, sondern über die Contact Picker API: navigator.contacts.select(['address']) öffnet die native Kontaktauswahl des Geräts. Jeder ausgewählte Kontakt enthält ein Array address mit ContactAddress-Instanzen. Aus diesen kannst du postalCode zusammen mit city, addressLine oder country auslesen, zum Beispiel um ein Liefer- oder Rechnungsformular vorauszufüllen.
Der Wert wird unverändert so übernommen, wie er im Adressbuch des Nutzers steht. Das Format hängt vom Land ab und wird nicht geprüft: Er kann Buchstaben, Leerzeichen und Bindestriche enthalten (z. B. "SW1A 1AA" oder "12345-6789") und darf leer sein.
Rückgabewert
"".Beispiele
Postleitzahl eines ausgewählten Kontakts auslesen
const button = document.querySelector('#kontakt-waehlen');
button.addEventListener('click', async () => {
// Funktionsprüfung: API ist nur in wenigen Browsern verfügbar
if (!('contacts' in navigator && 'ContactsManager' in window)) {
console.warn('Contact Picker API wird nicht unterstützt.');
return;
}
try {
const [kontakt] = await navigator.contacts.select(['name', 'address']);
const adresse = kontakt?.address?.[0];
console.log('PLZ:', adresse?.postalCode || '(keine Angabe)');
} catch (err) {
console.error('Auswahl fehlgeschlagen:', err);
}
});
Lieferformular mit PLZ und Ort vorausfüllen
const formular = document.querySelector('#lieferadresse');
const adresseUebernehmen = async () => {
const unterstuetzt = await navigator.contacts.getProperties();
if (!unterstuetzt.includes('address')) return;
const kontakte = await navigator.contacts.select(['address']);
const adresse = kontakte[0]?.address?.[0];
if (!adresse) return;
formular.elements.strasse.value = adresse.addressLine.join(', ');
// Leerzeichen am Rand entfernen, Format sonst beibehalten
formular.elements.plz.value = adresse.postalCode.trim();
formular.elements.ort.value = adresse.city;
formular.elements.land.value = adresse.country;
};
document.querySelector('#aus-kontakten').addEventListener('click', adresseUebernehmen);
Alle Postleitzahlen mehrerer Kontakte sammeln und prüfen
const plzSammeln = async () => {
const kontakte = await navigator.contacts.select(['name', 'address'], { multiple: true });
const liste = kontakte.flatMap((k) =>
(k.address ?? []).map((a) => ({
name: k.name?.[0] ?? 'Unbekannt',
plz: a.postalCode,
// Einfache Prüfung auf deutsches Format (5 Ziffern)
gueltigDE: /^\d{5}$/.test(a.postalCode)
}))
);
console.table(liste);
return liste;
};
document.querySelector('#sammeln').addEventListener('click', plzSammeln);
// Wichtig · Fallstricke
- Experimentell und kaum unterstützt: Die Contact Picker API gibt es praktisch nur in Chrome für Android (ab Version 80) und in darauf aufbauenden Browsern. Desktop-Browser, Firefox und Safari unterstützen sie standardmäßig nicht. Prüfe die Verfügbarkeit immer vorher und biete eine manuelle Eingabe als Ausweichlösung an.
- Nur in sicherem Kontext mit Nutzeraktion:
navigator.contacts.select()läuft nur über HTTPS, nur im obersten Browsing-Kontext (nicht in iframes) und nur als Reaktion auf eine Nutzeraktion wie einen Klick. Sonst wird einSecurityErroroderInvalidStateErrorausgelöst. - Ob
'address'unterstützt wird, ist nicht garantiert: Nicht jede Plattform liefert Adressen mit. Prüfe das vorher mitnavigator.contacts.getProperties(). - Leerer Wert möglich: Fehlt die Postleitzahl, bekommst du
""stattnull. Prüfe also auf Leere, nicht nur aufundefined. - Kein festes Format: Der Wert wird nicht geprüft oder vereinheitlicht. Verlass dich nicht auf reine Ziffern. Führende Nullen (z. B.
"01067") gehen verloren, wenn du den Wert in eine Zahl umwandelst – bewahre ihn deshalb immer als Zeichenkette auf. - Datenschutz: Adressdaten sind personenbezogen. Übertrage sie nur mit Einwilligung und nur so weit wie nötig (DSGVO).