Start · Sprachen · JavaScript · Referenz · HTMLGeolocationElement.permissionStatus

HTMLGeolocationElement.permissionStatus

Eigenschaft

Schreibgeschützte Eigenschaft, die den aktuellen Berechtigungsstatus der <code>geolocation</code>-Funktion für ein <code>&lt;geolocation&gt;</code>-Element als <code>"granted"</code>, <code>"denied"</code> oder <code>"prompt"</code> liefert.

seit JavaScript Experimentell: Chromium-basierte Browser (Origin T Kategorie: webapi

Signatur

get HTMLGeolocationElement.permissionStatus

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

Typ
"granted" | "denied" | "prompt"
Beschreibung
Ein 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');
}
Aktueller Status: prompt

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}`);
  }
};
Status geändert: prompt → granted

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());
prompt

// 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 liefern position bzw. das location-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 eines PermissionStatus-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 Policy geolocation.