Start · Sprachen · JavaScript · Referenz · GeolocationPositionError.message

GeolocationPositionError.message

Eigenschaft

Schreibgeschützter String mit einer menschenlesbaren Beschreibung, warum die Standortermittlung fehlgeschlagen ist.

seit JavaScript Baseline: alle modernen Browser (Secure Context er Kategorie: webapi

Signatur

GeolocationPositionError.message

Beschreibung

Die schreibgeschützte Eigenschaft message eines GeolocationPositionError-Objekts enthält einen vom Browser erzeugten Text, der den Fehler näher beschreibt. Das Fehlerobjekt bekommt der Fehler-Callback von navigator.geolocation.getCurrentPosition() oder watchPosition() übergeben.

Die Meldung eignet sich vor allem für Logging, Debugging und Fehlerberichte. Laut Spezifikation ist sie ausdrücklich für Entwickler gedacht und nicht für die Anzeige gegenüber Endnutzern. Inhalt, Sprache und Formulierung hängen vom Browser ab und können auch ein leerer String sein.

Für die Programmlogik sollte man immer die Eigenschaft code auswerten und sie mit den Konstanten PERMISSION_DENIED (1), POSITION_UNAVAILABLE (2) und TIMEOUT (3) vergleichen. Nutzerfreundliche Texte formuliert man selbst anhand dieses Codes.

Rückgabewert

Typ
string
Beschreibung
Eine vom Browser festgelegte, menschenlesbare Fehlerbeschreibung, z. B. "User denied Geolocation". Kann auch leer sein.

Beispiele

Fehlermeldung beim Abrufen der Position protokollieren

navigator.geolocation.getCurrentPosition(
  (pos) => console.log(pos.coords.latitude, pos.coords.longitude),
  (err) => {
    // message dient der Diagnose, code der Programmlogik
    console.warn(`Geolocation-Fehler (${err.code}): ${err.message}`);
  }
);
Geolocation-Fehler (1): User denied Geolocation

Eigene Nutzertexte über code, message nur fürs Log

const userTexts = {
  [GeolocationPositionError.PERMISSION_DENIED]: 'Bitte erlaube den Standortzugriff in den Browser-Einstellungen.',
  [GeolocationPositionError.POSITION_UNAVAILABLE]: 'Dein Standort konnte nicht ermittelt werden.',
  [GeolocationPositionError.TIMEOUT]: 'Die Standortabfrage hat zu lange gedauert.'
};

const onError = (err) => {
  document.querySelector('#status').textContent =
    userTexts[err.code] ?? 'Unbekannter Fehler.';
  console.debug('Browser-Meldung:', err.message || '(leer)');
};

navigator.geolocation.getCurrentPosition(() => {}, onError, { timeout: 5000 });
Browser-Meldung: Timeout expired

Promise-Wrapper mit Fehlerweitergabe

const getPosition = (options) =>
  new Promise((resolve, reject) =>
    navigator.geolocation.getCurrentPosition(resolve, reject, options)
  );

try {
  const pos = await getPosition({ enableHighAccuracy: true, timeout: 8000 });
  console.log('Genauigkeit:', pos.coords.accuracy, 'm');
} catch (err) {
  if (err instanceof GeolocationPositionError) {
    // An ein Monitoring-System senden
    console.error({ code: err.code, message: err.message });
  }
}
{ code: 3, message: "Timeout expired" }

// Wichtig · Fallstricke

  • Nicht für die Nutzeroberfläche gedacht: Der Text ist browserabhängig, meist englisch und kann leer sein. Für Logik und Nutzertexte wertet man code aus.
  • Die Texte unterscheiden sich zwischen Chrome, Firefox und Safari. Deshalb sollte man nie per String-Vergleich auf message prüfen.
  • GeolocationPositionError erbt nicht von Error. err instanceof Error ist also false, und es gibt keinen stack.
  • Die Geolocation-API gibt es nur im Secure Context (HTTPS oder localhost). Auf HTTP-Seiten kommt es in modernen Browsern zu einem Fehler mit code 1 (PERMISSION_DENIED).
  • Das Interface hieß früher PositionError. Sehr alte Browser kennen nur diesen Namen. Der globale Konstruktor GeolocationPositionError ist daher nicht überall vorhanden.