Start · Sprachen · JavaScript · Referenz · HTMLGeolocationElement: promptdismiss

HTMLGeolocationElement: promptdismiss

Ereignis

Wird ausgelöst, wenn der Benutzer über das <code>&lt;geolocation&gt;</code>-Element den Berechtigungsdialog öffnet und ihn ohne Entscheidung schließt, z. B. per „Schließen“ oder Esc.

seit JavaScript Experimentell: Chromium-basierte Browser (ca. Chro Kategorie: webapi

Signatur

geolocationElement.addEventListener("promptdismiss", handler)

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

Typ
void
Beschreibung
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;
});
Dialog geschlossen ohne Entscheidung: promptdismiss

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}`);
});
Benutzer hat den Dialog abgebrochen

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)
  );
}
Dialog 1x geschlossen Dialog 2x geschlossen Listener entfernt

// Wichtig · Fallstricke

  • Experimentell: <geolocation> und HTMLGeolocationElement gibt 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 biete navigator.geolocation als Rückfall an.
  • promptdismiss bedeutet nicht „abgelehnt“. Eine echte Ablehnung löst promptaction aus. Werte deshalb für die tatsächliche Entscheidung permissionStatus aus.
  • 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 geolocation erlaubt sein.