Signatur
Beschreibung
Die Eigenschaft permissionStatus eines HTMLGeolocationElement (also des deklarativen <geolocation>-Elements) gibt den aktuellen Berechtigungsstatus für den Standortzugriff zurück. Der Wert entspricht dem Enum PermissionState der Permissions API: "granted" (erteilt), "denied" (abgelehnt) oder "prompt" (Nutzer wird beim nächsten Zugriff gefragt).
Im Gegensatz zu initialPermissionStatus, das den Zustand beim Laden des Elements festhält, ändert sich permissionStatus, sobald der Nutzer über das Element (oder die Browser-Einstellungen) eine Entscheidung trifft. Damit eignet sich die Eigenschaft, um die Oberfläche nach einer Nutzerinteraktion anzupassen – etwa einen Hinweistext auszublenden oder eine Karte zu laden.
Typischerweise liest man den Wert in den Event-Handlern promptaction und promptdismiss oder direkt nach dem Einfügen des Elements aus. Die Eigenschaft ist schreibgeschützt; eine Berechtigung lässt sich nur durch eine echte Nutzeraktion am Element erteilen, nicht per Skript.
Rückgabewert
PermissionState-String, der den aktuellen Berechtigungsstatus für die geolocation-Funktion beschreibt.Beispiele
Aktuellen Status auslesen
// HTML: <geolocation id="geo"></geolocation>
const geo = document.querySelector('#geo');
if (geo && 'permissionStatus' in geo) {
console.log(`Aktueller Status: ${geo.permissionStatus}`);
} else {
console.log('<geolocation> wird nicht unterstützt');
}
UI nach Nutzerentscheidung anpassen
const geo = document.querySelector('geolocation');
const hint = document.querySelector('#hinweis');
const updateUi = () => {
switch (geo.permissionStatus) {
case 'granted':
hint.textContent = 'Standort freigegeben – Karte wird geladen.';
break;
case 'denied':
hint.textContent = 'Standortzugriff abgelehnt. Bitte PLZ manuell eingeben.';
break;
default:
hint.textContent = 'Klicke auf den Button, um deinen Standort zu teilen.';
}
};
geo.addEventListener('promptaction', updateUi);
geo.addEventListener('promptdismiss', updateUi);
updateUi();
Initialen mit aktuellem Status vergleichen
const geo = document.querySelector('geolocation');
geo.onpromptaction = () => {
const vorher = geo.initialPermissionStatus;
const jetzt = geo.permissionStatus;
if (vorher !== jetzt) {
console.log(`Status geändert: ${vorher} → ${jetzt}`);
}
};
Fallback mit der Permissions API
const getGeoStatus = async () => {
const geo = document.querySelector('geolocation');
if (geo && 'permissionStatus' in geo) {
return geo.permissionStatus;
}
// Fallback für Browser ohne <geolocation>
const status = await navigator.permissions.query({ name: 'geolocation' });
return status.state;
};
console.log(await getGeoStatus());
// Wichtig · Fallstricke
Experimentell: Das <geolocation>-Element ist aus dem Vorschlag für Permission-Elemente (<permission>) hervorgegangen und bisher nur in Chromium-basierten Browsern (Origin Trial bzw. hinter Flag) verfügbar. Firefox und Safari unterstützen es nicht; nutze immer eine Feature-Erkennung wie 'permissionStatus' in element und biete einen Fallback über navigator.geolocation bzw. navigator.permissions.query() an.
- Der Wert ist schreibgeschützt; Zuweisungen werden stillschweigend ignoriert (im Strict Mode:
TypeError). "granted"bedeutet nur, dass die Berechtigung vorliegt – nicht, dass bereits eine Position ermittelt wurde. Die Koordinaten liefernpositionbzw. daslocation-Event.- Die Berechtigung kann jederzeit über die Browser-Einstellungen widerrufen werden; lies den Wert daher bei Bedarf neu aus, statt ihn zu cachen. Für Änderungen außerhalb des Elements eignet sich das
change-Event einesPermissionStatus-Objekts. - Ist das Element ungültig (siehe
isValid/invalidReason, z. B. durch verdeckendes CSS oder fehlende sichere Umgebung), kann der Nutzer den Status darüber nicht ändern. Das Element funktioniert nur in sicheren Kontexten (HTTPS) und unterliegt der Permissions Policygeolocation.