Signatur
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
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.';
}
});
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');
};
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);
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);
}
// Wichtig · Fallstricke
- Experimentell:
<geolocation>undHTMLGeolocationElementgibt 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 windowprüfen und einen Rückfall übernavigator.geolocationanbieten. promptactionsagt nur, dass der Benutzer entschieden hat, nicht wie. Das Ergebnis steht inpermissionStatusdes Elements.- Wird der Dialog ohne Auswahl geschlossen, feuert nicht
promptaction, sondernpromptdismiss. 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; sieheisValid/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
geolocationerlaubt sein. - Das Ereignis enthält keine Standortdaten. Die Position kommt über die Eigenschaft
positiondes Elements bzw. übernavigator.geolocation. Ergebnisse, die Standortdaten enthalten, sind personenbezogen und entsprechend sparsam zu behandeln.