Signatur
Beschreibung
Das Ereignis promptdismiss gehört zur Schnittstelle HTMLGeolocationElement, die das deklarative HTML-Element <geolocation> abbildet. Aktiviert der Benutzer dieses Element, zeigt der Browser einen Berechtigungs- bzw. Standortdialog an. Schließt der Benutzer diesen Dialog, ohne eine Entscheidung zu treffen (Schließen-Schaltfläche, Esc-Taste oder Klick außerhalb des Dialogs), wird promptdismiss am Element ausgelöst.
Das Gegenstück ist promptaction. Dieses Ereignis wird ausgelöst, wenn der Benutzer im Dialog tatsächlich eine Wahl getroffen hat (zulassen oder ablehnen). Mit promptdismiss lässt sich also unterscheiden, ob jemand den Dialog nur „weggeklickt“ hat. Das ist praktisch, um eine dezente Erklärung einzublenden, warum der Standort gebraucht wird, oder um eine manuelle Alternative anzubieten (z. B. PLZ-Eingabe).
Registrieren kannst du den Handler entweder mit addEventListener("promptdismiss", handler) oder über die Eigenschaft onpromptdismiss. Das Ereignis ist ein einfaches Event ohne zusätzliche Daten. Es bubbelt nicht und kann nicht abgebrochen werden. Den aktuellen Zustand liest du bei Bedarf über Eigenschaften wie permissionStatus direkt am Element aus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname, hier immer "promptdismiss". |
|
| $handler Pflicht | (event: Event) => void | Callback, das beim Schließen des Dialogs aufgerufen wird. Es erhält ein einfaches Event-Objekt, dessen target das <geolocation>-Element ist. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie once, signal oder capture. |
Rückgabewert
addEventListener gibt nichts zurück. Der Handler bekommt ein Event-Objekt.Beispiele
Hinweis anzeigen, wenn der Dialog weggeklickt wurde
// HTML: <geolocation id="geo"></geolocation>
// <p id="hint" hidden>Ohne Standort kannst du deine PLZ manuell eingeben.</p>
const geo = document.querySelector('#geo');
const hint = document.querySelector('#hint');
geo.addEventListener('promptdismiss', (event) => {
console.log('Dialog geschlossen ohne Entscheidung:', event.type);
hint.hidden = false;
});
promptdismiss und promptaction unterscheiden (on-Property)
const geo = document.querySelector('geolocation');
geo.onpromptdismiss = () => {
console.log('Benutzer hat den Dialog abgebrochen');
};
geo.onpromptaction = () => {
// Entscheidung wurde getroffen – aktuellen Status auslesen
console.log('Entscheidung getroffen, Status:', geo.permissionStatus);
};
geo.addEventListener('location', () => {
const { latitude, longitude } = geo.position.coords;
console.log(`Position: ${latitude}, ${longitude}`);
});
Mit Feature-Erkennung und removeEventListener
const geo = document.querySelector('geolocation');
if ('HTMLGeolocationElement' in window && geo instanceof HTMLGeolocationElement) {
let dismissCount = 0;
const onDismiss = () => {
dismissCount += 1;
console.log(`Dialog ${dismissCount}x geschlossen`);
// Nach zweimaligem Wegklicken nicht weiter nachhaken
if (dismissCount >= 2) {
geo.removeEventListener('promptdismiss', onDismiss);
console.log('Listener entfernt');
}
};
geo.addEventListener('promptdismiss', onDismiss);
} else {
// Rückfall auf die klassische API
navigator.geolocation.getCurrentPosition(
(pos) => console.log(pos.coords.latitude, pos.coords.longitude),
(err) => console.warn('Standort nicht verfügbar:', err.message)
);
}
// Wichtig · Fallstricke
- Experimentell:
<geolocation>undHTMLGeolocationElementgibt es bisher nur in Chromium-basierten Browsern (Nachfolger des experimentellen<permission>-Elements). Firefox und Safari unterstützen das Element nicht. Prüfe die Unterstützung per Feature-Erkennung und bietenavigator.geolocationals Rückfall an. promptdismissbedeutet nicht „abgelehnt“. Eine echte Ablehnung löstpromptactionaus. Werte deshalb für die tatsächliche EntscheidungpermissionStatusaus.- Bedränge den Benutzer nach dem Schließen nicht mit erneuten Aufforderungen. Browser können das Element sonst sperren oder als ungültig markieren (siehe
invalid/validationstatuschange). - Das Ereignis wird nur nach echter Benutzeraktivierung des Elements ausgelöst. Ein programmatisches
click()löst keinen Dialog aus. - Nur in sicheren Kontexten (HTTPS) verfügbar. In iframes muss die Permissions-Policy
geolocationerlaubt sein.