Signatur
Beschreibung
Die schreibgeschützte Eigenschaft initialPermissionStatus des Elements <geolocation> (HTMLGeolocationElement) gibt den Berechtigungsstatus der Standortfunktion zurück. Gemeint ist der Status, der beim ersten Laden der Seite galt. Der Wert entspricht dem Aufzählungstyp PermissionState und ist einer von "granted", "denied" oder "prompt".
Der Wert bleibt über die gesamte Lebensdauer der Seite gleich, auch wenn der Nutzer die Berechtigung später erteilt oder entzieht. Den aktuellen Stand liefert die Eigenschaft permissionStatus. Vergleicht man beide Werte, erkennt man, ob sich die Berechtigung während des Besuchs geändert hat. Das hilft zum Beispiel bei Auswertungen („Wie viele Nutzer haben über das Element zugestimmt?“) oder beim Anpassen der Oberfläche.
Typische Anwendungsfälle:
- Erklärtexte nur anzeigen, wenn beim Laden noch keine Entscheidung vorlag (
"prompt"). - Bei
"granted"direkt Standortinhalte laden, statt das Element hervorzuheben. - Messen, wie oft das Element eine vorherige Ablehnung (
"denied") in eine Zustimmung umgewandelt hat.
Rückgabewert
PermissionState, der den Berechtigungsstatus für geolocation beim ersten Laden der Seite angibt.Beispiele
Anfangsstatus auslesen
// HTML: <geolocation id="geo"></geolocation>
const geo = document.getElementById('geo');
if ('initialPermissionStatus' in geo) {
console.log(`Status beim Laden: ${geo.initialPermissionStatus}`);
} else {
console.log('<geolocation> wird nicht unterstützt');
}
Oberfläche je nach Anfangsstatus anpassen
const geo = document.querySelector('geolocation');
const hint = document.querySelector('#geo-hint');
switch (geo.initialPermissionStatus) {
case 'granted':
hint.textContent = 'Dein Standort wird verwendet.';
break;
case 'denied':
hint.textContent = 'Du hast den Standortzugriff abgelehnt. Klicke auf den Button, um ihn doch zu erlauben.';
break;
default: // 'prompt'
hint.textContent = 'Klicke auf den Button, um Filialen in deiner Nähe zu finden.';
}
Änderung der Berechtigung während des Besuchs erkennen
const geo = document.querySelector('geolocation');
geo.addEventListener('promptdismiss', () => {
console.log('Nutzer hat den Dialog geschlossen');
});
geo.addEventListener('location', () => {
const vorher = geo.initialPermissionStatus;
const jetzt = geo.permissionStatus;
if (vorher !== 'granted' && jetzt === 'granted') {
console.log(`Berechtigung geändert: ${vorher} → ${jetzt}`);
}
if (geo.position) {
const { latitude, longitude } = geo.position.coords;
console.log(latitude.toFixed(3), longitude.toFixed(3));
}
});
// Wichtig · Fallstricke
- Experimentell:
<geolocation>undHTMLGeolocationElementgibt es bislang nur in Chromium-basierten Browsern (Origin Trial bzw. hinter einem Flag). Firefox und Safari unterstützen das Element nicht. Prüfe die Unterstützung immer vorab, z. B. mit'initialPermissionStatus' in elementodertypeof HTMLGeolocationElement !== 'undefined'. Als Rückfallebene dientnavigator.geolocation. - Der Wert ändert sich nicht. Wer auf Änderungen reagieren will, muss
permissionStatuslesen odernavigator.permissions.query({ name: 'geolocation' })mit dem Eventchangeverwenden. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen
TypeErroraus. - Browser können aus Datenschutzgründen
"prompt"melden, obwohl der Nutzer früher abgelehnt hat, etwa im privaten Modus oder bei zurückgesetzten Berechtigungen. Verlasse dich also nicht darauf, dass"prompt"immer „noch nie gefragt“ bedeutet. - Das Element funktioniert nur in einem sicheren Kontext (HTTPS). In iframes muss die Permissions Policy
geolocationerlaubt sein.