Start · Sprachen · JavaScript · Referenz · ContactAddress.country

ContactAddress.country

Eigenschaft

Schreibgeschützter String mit dem Ländercode einer Kontaktadresse nach ISO 3166-1 alpha-2, z. B. <code>"DE"</code> oder <code>"AT"</code>.

seit JavaScript Experimentell: nur Chrome für Android 80+ (Contact Kategorie: webapi

Signatur

ContactAddress.country

Beschreibung

Die schreibgeschützte Eigenschaft country des Interfaces ContactAddress enthält das Land einer Postadresse. Der Wert ist ein Ländercode aus zwei Großbuchstaben nach ISO 3166-1 alpha-2, zum Beispiel "DE" für Deutschland, "CH" für die Schweiz oder "US" für die Vereinigten Staaten.

ContactAddress-Objekte erzeugt man nicht selbst. Man bekommt sie von der Contact Picker API: Ruft man navigator.contacts.select() mit der Eigenschaft "address" auf, enthält jeder ausgewählte Kontakt ein Array address mit ContactAddress-Einträgen. ContactAddress erbt von PaymentAddress, die Eigenschaft ist also dieselbe wie bei PaymentAddress.country.

Typische Einsatzfälle sind Formulare, die Liefer- oder Rechnungsadressen aus dem Adressbuch des Geräts vorausfüllen. Mit dem Ländercode kann man eine Länderauswahl vorbelegen, länderspezifische Regeln prüfen (z. B. das Format der Postleitzahl oder ob in dieses Land geliefert wird) oder mit Intl.DisplayNames einen lesbaren, übersetzten Ländernamen anzeigen.

Enthält der Kontakt kein Land, ist der Wert ein leerer String. Er ist nicht null. Prüfe den Wert deshalb vor der Verwendung.

Rückgabewert

Typ
string
Beschreibung
Ländercode nach ISO 3166-1 alpha-2 in Großbuchstaben (z. B. "DE"). Ist kein Land bekannt, wird ein leerer String "" zurückgegeben.

Beispiele

Land aus einem ausgewählten Kontakt auslesen

const button = document.querySelector('#kontakt-waehlen');

button.addEventListener('click', async () => {
  // Die API gibt es nur in wenigen Browsern
  if (!('contacts' in navigator)) {
    console.warn('Contact Picker API wird nicht unterstützt.');
    return;
  }

  const supported = await navigator.contacts.getProperties();
  if (!supported.includes('address')) {
    console.warn('Adressen können nicht abgefragt werden.');
    return;
  }

  try {
    const [contact] = await navigator.contacts.select(['name', 'address']);
    const address = contact?.address?.[0];
    console.log(address ? address.country || '(kein Land)' : '(keine Adresse)');
  } catch (err) {
    console.error('Auswahl abgebrochen oder fehlgeschlagen:', err);
  }
});
DE

Ländercode in lesbaren Ländernamen umwandeln

const laenderNamen = new Intl.DisplayNames(['de'], { type: 'region' });

const formatCountry = (contactAddress) => {
  const code = contactAddress.country;
  return code ? laenderNamen.of(code) : 'Unbekanntes Land';
};

const pickAddress = async () => {
  const [contact] = await navigator.contacts.select(['address']);
  const address = contact?.address?.[0];
  if (address) {
    console.log(formatCountry(address));
  }
};

document.querySelector('#adresse').addEventListener('click', pickAddress);
Österreich

Lieferland prüfen und Formular vorausfüllen

const LIEFERLAENDER = new Set(['DE', 'AT', 'CH']);

const fillShippingForm = async () => {
  const contacts = await navigator.contacts.select(['name', 'address'], { multiple: false });
  const address = contacts[0]?.address?.find((a) => LIEFERLAENDER.has(a.country));

  if (!address) {
    alert('Keine Adresse in einem unserer Lieferländer gefunden.');
    return;
  }

  document.querySelector('#land').value = address.country;
  document.querySelector('#plz').value = address.postalCode;
  document.querySelector('#ort').value = address.city;
  document.querySelector('#strasse').value = address.addressLine.join(', ');
};

document.querySelector('#aus-kontakten').addEventListener('click', fillShippingForm);

// Wichtig · Fallstricke

  • Experimentell und wenig unterstützt: Die Contact Picker API gibt es praktisch nur in Chrome für Android (ab Version 80). Desktop-Browser, Firefox und Safari unterstützen sie standardmäßig nicht. Prüfe deshalb immer mit 'contacts' in navigator und navigator.contacts.getProperties(), ob sie verfügbar ist, und biete eine Eingabe von Hand als Ersatz an.
  • Sicherer Kontext und Nutzeraktion: navigator.contacts.select() funktioniert nur über HTTPS, nur im obersten Browsing-Kontext (nicht in iframes) und nur als Reaktion auf eine Nutzeraktion, etwa einen Klick. Sonst wird das Promise abgelehnt.
  • Leerer String statt null: Hat der Kontakt kein Land, ist country "". Übergibst du diesen Wert ungeprüft an Intl.DisplayNames.prototype.of(), wird ein RangeError ausgelöst.
  • Keine Garantie für gültige Codes: Die Daten kommen aus dem Adressbuch des Nutzers. Prüfe den Wert serverseitig trotzdem, bevor du ihn z. B. für Versandkosten verwendest.
  • Datenschutz: Adressen sind personenbezogene Daten. Fordere nur die Eigenschaften an, die du wirklich brauchst.