Start · Sprachen · JavaScript · Referenz · HTMLGeolocationElement: promptaction

HTMLGeolocationElement: promptaction

Ereignis

Wird ausgelöst, wenn der Benutzer das <code>&lt;geolocation&gt;</code>-Element aktiviert und im Berechtigungsdialog eine Entscheidung trifft, also den Standortzugriff erlaubt oder verweigert.

seit JavaScript Experimentell: nur Chromium-basierte Browser, kein Kategorie: webapi

Signatur

geolocationElement.addEventListener("promptaction", handler)

Beschreibung

Das Ereignis promptaction gehört zur Schnittstelle HTMLGeolocationElement, also zum deklarativen <geolocation>-Element. Klickt der Benutzer auf das Element, öffnet der Browser einen Dialog zur Berechtigung geolocation. Wählt der Benutzer dort eine Option, also Erlauben oder Nicht erlauben, feuert promptaction. Schließt er den Dialog dagegen ohne Entscheidung, etwa mit Esc oder einem Klick daneben, feuert stattdessen promptdismiss.

Das Ereignis ist ein einfaches Event ohne eigene Zusatzdaten. Welche Entscheidung gefallen ist, liest man im Handler aus dem Element selbst, vor allem über permissionStatus ("granted", "denied" oder "prompt"). Ist die Berechtigung erteilt, kann man danach über die Eigenschaften position bzw. error des Elements oder klassisch über navigator.geolocation an Standortdaten kommen.

Typische Einsatzfälle sind: die Oberfläche nach der Freigabe umschalten (Karte zeigen, Hinweistext ausblenden), bei einer Ablehnung eine Alternative anbieten (z. B. eine Postleitzahl manuell eingeben lassen) und die Entscheidungen für Statistiken erfassen. Den Handler registriert man mit addEventListener("promptaction", …) oder über die Eigenschaft onpromptaction.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Der Ereignisname "promptaction". Bei der Eigenschaft onpromptaction entfällt er.
$handler Pflicht (event: Event) => void | EventListenerObject Callback, der ein gewöhnliches Event erhält. event.target ist das auslösende HTMLGeolocationElement.
$options boolean | AddEventListenerOptions false Die üblichen Optionen von addEventListener, z. B. { once: true } oder { signal }, um den Handler per AbortController zu entfernen.

Rückgabewert

Typ
void
Beschreibung
addEventListener gibt undefined zurück. Das Ereignis selbst ist ein Event ohne zusätzliche Eigenschaften.

Beispiele

Auf die Entscheidung des Benutzers reagieren

// HTML: <geolocation id="geo"></geolocation> <p id="hinweis"></p>
const geo = document.querySelector('#geo');
const hinweis = document.querySelector('#hinweis');

geo.addEventListener('promptaction', (event) => {
  const status = event.target.permissionStatus;
  console.log('Entscheidung:', status);

  if (status === 'granted') {
    hinweis.textContent = 'Danke! Wir zeigen Filialen in Ihrer Nähe.';
  } else {
    hinweis.textContent = 'Kein Standort freigegeben – bitte PLZ eingeben.';
  }
});
Entscheidung: granted

Mit onpromptaction und promptdismiss kombinieren

const geo = document.querySelector('geolocation');

// Der Benutzer hat eine Option gewählt
geo.onpromptaction = () => {
  console.log(`Dialog beantwortet: ${geo.permissionStatus}`);
};

// Der Dialog wurde ohne Auswahl geschlossen
geo.onpromptdismiss = () => {
  console.log('Dialog ohne Entscheidung geschlossen');
};
Dialog beantwortet: denied

Handler per AbortController wieder entfernen

const geo = document.querySelector('geolocation');
const controller = new AbortController();

const beiEntscheidung = () => {
  if (geo.permissionStatus === 'granted') {
    console.log('Freigabe erteilt – Listener wird entfernt');
    controller.abort(); // entspricht removeEventListener
  }
};

geo.addEventListener('promptaction', beiEntscheidung, {
  signal: controller.signal,
});

// Alternativ klassisch:
// geo.removeEventListener('promptaction', beiEntscheidung);
Freigabe erteilt – Listener wird entfernt

Funktionserkennung mit Rückfall auf die Geolocation-API

if ('HTMLGeolocationElement' in window) {
  const geo = document.createElement('geolocation');
  geo.addEventListener('promptaction', () => {
    console.log('Status:', geo.permissionStatus);
  });
  document.body.append(geo);
} else {
  // Rückfall: eigener Button und die klassische API
  const btn = document.createElement('button');
  btn.textContent = 'Standort verwenden';
  btn.addEventListener('click', () => {
    navigator.geolocation.getCurrentPosition(
      (pos) => console.log(pos.coords.latitude, pos.coords.longitude),
      (err) => console.warn('Fehler:', err.message)
    );
  });
  document.body.append(btn);
}
Status: granted

// Wichtig · Fallstricke

  • Experimentell: <geolocation> und HTMLGeolocationElement gibt es bisher nur in Chromium-basierten Browsern, teils nur über Origin Trial oder Flags. Firefox und Safari unterstützen sie nicht. Deshalb immer vorher mit 'HTMLGeolocationElement' in window prüfen und einen Rückfall über navigator.geolocation anbieten.
  • promptaction sagt nur, dass der Benutzer entschieden hat, nicht wie. Das Ergebnis steht in permissionStatus des Elements.
  • Wird der Dialog ohne Auswahl geschlossen, feuert nicht promptaction, sondern promptdismiss. Beide Ereignisse behandeln, wenn die Oberfläche in jedem Fall reagieren soll.
  • Das Ereignis feuert nur, wenn der Benutzer das Element wirklich aktiviert. Ein Klick per Skript (element.click()) öffnet keinen Dialog. Ist das Element ungültig (verdeckt, zu klein, zu wenig Kontrast; siehe isValid / invalidReason), lässt es sich gar nicht aktivieren.
  • Wie bei allen Standort-APIs ist ein sicherer Kontext (HTTPS) nötig. In iframes muss außerdem die Permissions Policy geolocation erlaubt sein.
  • Das Ereignis enthält keine Standortdaten. Die Position kommt über die Eigenschaft position des Elements bzw. über navigator.geolocation. Ergebnisse, die Standortdaten enthalten, sind personenbezogen und entsprechend sparsam zu behandeln.