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

FeaturePolicy.allowedFeatures()

Methode

Gibt ein Array mit den Namen aller Features zurück, die die aktuelle Permissions Policy (früher Feature Policy) im jeweiligen Kontext erlaubt.

seit JavaScript Experimentell, nicht standardisiert: nur Chromium- Kategorie: webapi

Signatur

FeaturePolicy.prototype.allowedFeatures()

Beschreibung

Die Methode allowedFeatures() der Schnittstelle FeaturePolicy liefert eine Liste von Direktivennamen (z. B. "camera", "geolocation", "fullscreen"). Das sind alle Features, die die aktive Richtlinie dem aktuellen Dokument oder einem eingebetteten <iframe> für den eigenen Ursprung erlaubt. Auf das Richtlinienobjekt greift man über document.featurePolicy bzw. iframeElement.featurePolicy zu.

Nützlich ist die Methode zur Laufzeitprüfung: Bevor eine Anwendung auf sensible APIs wie Kamera, Mikrofon oder Standort zugreift, kann sie nachsehen, ob der HTTP-Header Permissions-Policy (bzw. der ältere Feature-Policy) oder das allow-Attribut eines iframes das Feature überhaupt freigibt. So lassen sich Bedienelemente ausblenden, die ohnehin nicht funktionieren würden, oder Konfigurationsfehler bei der Richtlinie finden.

Wichtig: Ein erlaubtes Feature heißt nur, dass die Richtlinie es nicht blockiert. Ob der Nutzer tatsächlich eine Berechtigung erteilt hat, prüft man mit der Permissions API (navigator.permissions.query()). Wenn du nur ein einzelnes Feature prüfen willst, ist allowsFeature(name) meist die bessere Wahl.

Rückgabewert

Typ
string[]
Beschreibung
Ein Array aus Zeichenketten mit den Direktivennamen aller Features, die im aktuellen Kontext für den eigenen Ursprung erlaubt sind. Welche Namen enthalten sein können, hängt vom Browser ab.

Beispiele

Alle erlaubten Features des Dokuments auflisten

// Nur in Chromium-Browsern verfügbar – deshalb vorher prüfen
if ('featurePolicy' in document) {
  const allowed = document.featurePolicy.allowedFeatures();
  console.log(`Erlaubte Features (${allowed.length}):`);
  allowed.forEach((feature) => console.log(`- ${feature}`));
} else {
  console.log('FeaturePolicy-API wird nicht unterstützt.');
}
Erlaubte Features (42): - accelerometer - autoplay - camera - ...

UI abhängig von der Richtlinie anpassen

const isFeatureAllowed = (name) => {
  const policy = document.featurePolicy;
  // Ohne API-Unterstützung optimistisch annehmen, dass das Feature erlaubt ist
  if (!policy) return true;
  return policy.allowedFeatures().includes(name);
};

const cameraButton = document.querySelector('#start-camera');
if (cameraButton && !isFeatureAllowed('camera')) {
  cameraButton.disabled = true;
  cameraButton.title = 'Kamera ist durch die Permissions Policy blockiert';
}

Richtlinie eines eingebetteten iframes prüfen

const frame = document.createElement('iframe');
frame.src = 'https://example.com/widget.html';
frame.allow = 'fullscreen; geolocation';
document.body.append(frame);

frame.addEventListener('load', () => {
  const features = frame.featurePolicy?.allowedFeatures() ?? [];
  console.log('fullscreen:', features.includes('fullscreen'));
  console.log('camera:', features.includes('camera'));
});
fullscreen: true camera: false

// Wichtig · Fallstricke

  • Kompatibilität: Die FeaturePolicy-Schnittstelle ist experimentell und nicht standardisiert. Sie gibt es nur in Chromium-basierten Browsern, Firefox und Safari kennen sie nicht. Frage deshalb immer vorher 'featurePolicy' in document ab. Die Spezifikation wurde in Permissions Policy umbenannt, die geplante Nachfolger-API heißt document.permissionsPolicy, ist aber noch nicht allgemein verfügbar.
  • Richtlinie ≠ Nutzerberechtigung: Ein Feature in der Liste kann trotzdem scheitern, wenn der Nutzer den Zugriff verweigert. Den Berechtigungsstatus prüfst du mit navigator.permissions.query().
  • Die Liste gilt nur für den eigenen Ursprung. Ob ein fremder Ursprung ein Feature nutzen darf, fragst du mit allowsFeature(feature, origin) ab.
  • Welche Direktivennamen vorkommen, unterscheidet sich je nach Browserversion. Feste Längen oder Reihenfolgen des Arrays solltest du nicht voraussetzen.
  • Bei iframes mit fremdem Ursprung spiegelt iframe.featurePolicy die Richtlinie aus Sicht des Elternelements wider, also das allow-Attribut plus die eigene Richtlinie.