Start · Sprachen · JavaScript · Referenz · FeaturePolicy.allowsFeature()

FeaturePolicy.allowsFeature()

Methode

Prüft, ob ein bestimmtes Browser-Feature (z. B. <code>camera</code> oder <code>geolocation</code>) laut aktueller Permissions Policy erlaubt ist, optional für einen bestimmten Origin.

seit JavaScript Experimentell: nur Chromium-Browser (Chrome/Edge/O Kategorie: webapi

Signatur

FeaturePolicy.prototype.allowsFeature(feature, origin)

Beschreibung

Die Methode allowsFeature() des FeaturePolicy-Interfaces fragt ab, ob eine einzelne Direktive der Permissions Policy (früher Feature Policy) im aktuellen Kontext erlaubt ist. Das zugehörige Objekt erreichst du über document.featurePolicy (Richtlinie des eigenen Dokuments) oder über iframeElement.featurePolicy (Richtlinie, die für den Inhalt eines eingebetteten Frames gilt).

Die Richtlinie selbst setzt der Server über den HTTP-Header Permissions-Policy (bzw. das veraltete Feature-Policy) oder das Dokument über das allow-Attribut von <iframe>. Mit allowsFeature() kannst du vor dem Aufruf einer Schnittstelle wie navigator.geolocation oder getUserMedia() prüfen, ob die Richtlinie sie überhaupt zulässt. So kannst du Bedienelemente ausblenden oder auf Alternativen ausweichen, statt einen Fehler zu bekommen.

Wichtig: Das Ergebnis sagt nur etwas über die Richtlinie aus, nicht darüber, ob der Nutzer eine Berechtigung erteilt hat. Für den Berechtigungsstatus ist die Permissions API (navigator.permissions.query()) zuständig. Ohne Angabe von origin wird der Origin des Dokuments bzw. des Frames verwendet.

Parameter

Name Typ Default Beschreibung
$feature Pflicht string Name der Richtlinien-Direktive, z. B. "camera", "microphone", "geolocation", "fullscreen" oder "autoplay". Unbekannte Namen ergeben false.
$origin string Origin des Dokuments bzw. des iframe-Inhalts Origin, für den die Prüfung erfolgen soll, z. B. "https://maps.example.com". Muss ein gültiger Origin-String sein.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Feature für den angegebenen (bzw. den eigenen) Origin erlaubt ist, sonst false.

Beispiele

Geolocation nur anbieten, wenn die Richtlinie es erlaubt

const policy = document.featurePolicy;
const button = document.querySelector('#standort-button');

// Feature-Erkennung: API existiert nur in Chromium-Browsern
if (policy && !policy.allowsFeature('geolocation')) {
  button.hidden = true;
  console.log('Geolocation ist per Permissions Policy gesperrt.');
} else {
  button.addEventListener('click', () => {
    navigator.geolocation.getCurrentPosition(
      (pos) => console.log(pos.coords.latitude, pos.coords.longitude),
      (err) => console.error(err.message)
    );
  });
}
Geolocation ist per Permissions Policy gesperrt.

Prüfung für einen bestimmten Origin

const policy = document.featurePolicy;

if (policy) {
  const erlaubt = policy.allowsFeature('camera', 'https://video.example.com');
  console.log(`Kamera für video.example.com: ${erlaubt}`);
}
Kamera für video.example.com: false

Richtlinie eines iframes prüfen

// <iframe id="karte" src="https://maps.example.com" allow="fullscreen; geolocation"></iframe>
const frame = document.querySelector('#karte');

if ('featurePolicy' in frame) {
  const features = ['fullscreen', 'geolocation', 'microphone'];
  for (const f of features) {
    console.log(f, frame.featurePolicy.allowsFeature(f));
  }
}
fullscreen true geolocation true microphone false

Wiederverwendbare Hilfsfunktion mit Fallback

const isFeatureAllowed = (feature) => {
  const policy = document.featurePolicy ?? document.permissionsPolicy;
  // Ohne API: optimistisch true annehmen und Fehler später abfangen
  if (!policy || typeof policy.allowsFeature !== 'function') return true;
  return policy.allowsFeature(feature);
};

console.log(isFeatureAllowed('autoplay'));
true

// Wichtig · Fallstricke

  • Kompatibilität: document.featurePolicy und allowsFeature() gibt es nur in Chromium-Browsern (Chrome, Edge, Opera). Firefox und Safari bieten die API nicht an. Prüfe daher immer vorher, ob sie vorhanden ist, z. B. mit if (document.featurePolicy).
  • Nicht standardisiert: Die Spezifikation wurde in Permissions Policy umbenannt. Dort ist die Schnittstelle als document.permissionsPolicy vorgesehen, sie wird aber bisher kaum unterstützt. In Produktivcode solltest du dich nicht allein auf diese Methode verlassen.
  • true bedeutet nicht, dass der Nutzer zugestimmt hat. Die Nutzung kann trotzdem an einer verweigerten Berechtigung, einem fehlenden sicheren Kontext (HTTPS) oder fehlender Hardware scheitern. Fehler solltest du daher weiterhin abfangen.
  • Bei iframe.featurePolicy wird die Richtlinie aus dem Header der Elternseite und dem allow-Attribut berechnet. Header, die das eingebettete Dokument selbst sendet, fließen nicht ein.
  • Unbekannte oder falsch geschriebene Feature-Namen führen nicht zu einem Fehler, sondern geben still false zurück. Welche Namen der Browser kennt, zeigt document.featurePolicy.features().