Signatur
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
"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}`);
}
);
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 });
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 });
}
}
// 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
codeaus. - Die Texte unterscheiden sich zwischen Chrome, Firefox und Safari. Deshalb sollte man nie per String-Vergleich auf
messageprüfen. GeolocationPositionErrorerbt nicht vonError.err instanceof Errorist alsofalse, und es gibt keinenstack.- Die Geolocation-API gibt es nur im Secure Context (HTTPS oder localhost). Auf HTTP-Seiten kommt es in modernen Browsern zu einem Fehler mit
code1 (PERMISSION_DENIED). - Das Interface hieß früher
PositionError. Sehr alte Browser kennen nur diesen Namen. Der globale KonstruktorGeolocationPositionErrorist daher nicht überall vorhanden.