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

FeaturePolicy.getAllowlistForFeature()

Methode

Gibt die Allowlist (erlaubte Ursprünge) zurück, die in der aktuellen Feature-/Berechtigungsrichtlinie für ein bestimmtes Feature gilt.

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

Signatur

FeaturePolicy.prototype.getAllowlistForFeature(feature)

Beschreibung

Die Methode getAllowlistForFeature() des FeaturePolicy-Interfaces liefert ein Array mit den Ursprüngen, denen ein bestimmtes Feature (z. B. camera, geolocation oder fullscreen) laut der aktuell wirksamen Richtlinie erlaubt ist. Zugriff auf das Richtlinienobjekt erhält man über document.featurePolicy (Richtlinie des eigenen Dokuments) oder iframe.featurePolicy (Richtlinie, die für den Inhalt eines eingebetteten Frames gilt).

Die Allowlist spiegelt wider, was über den HTTP-Header Permissions-Policy (früher Feature-Policy) bzw. das allow-Attribut eines <iframe> festgelegt wurde. Enthält das Array den Eintrag "*", ist das Feature für alle Ursprünge erlaubt; ein leeres Array bedeutet, dass das Feature für niemanden freigegeben ist.

Nützlich ist die Methode vor allem zur Diagnose: Man kann während der Entwicklung prüfen, ob eine Header-Konfiguration wie gewünscht greift, oder in eingebetteten Widgets feststellen, welche Ursprünge ein Feature nutzen dürfen. Für eine reine Ja/Nein-Prüfung ist allowsFeature() meist die einfachere Wahl.

Parameter

Name Typ Default Beschreibung
$feature Pflicht string Name der Richtlinien-Direktive, z. B. "camera", "microphone", "geolocation", "fullscreen". Unbekannte Namen führen zu einer Warnung in der Konsole und liefern ein leeres Array.

Rückgabewert

Typ
string[]
Beschreibung
Array von Ursprüngen (z. B. "https://example.com"), denen das Feature erlaubt ist. ["*"] steht für „alle Ursprünge“, [] für „niemand“.

Beispiele

Allowlist für die Kamera auslesen

// Header z. B.: Permissions-Policy: camera=(self "https://video.example.com")
if ('featurePolicy' in document) {
  const allowlist = document.featurePolicy.getAllowlistForFeature('camera');
  console.log('Kamera erlaubt für:', allowlist);
} else {
  console.log('Feature Policy API wird nicht unterstützt');
}
Kamera erlaubt für: ["https://www.meine-seite.de", "https://video.example.com"]

Allowlist interpretieren (alle, niemand, bestimmte Ursprünge)

const describeFeature = (feature) => {
  const policy = document.featurePolicy;
  if (!policy) return `${feature}: API nicht verfügbar`;

  const list = policy.getAllowlistForFeature(feature);
  if (list.includes('*')) return `${feature}: für alle Ursprünge erlaubt`;
  if (list.length === 0) return `${feature}: gesperrt`;
  return `${feature}: erlaubt für ${list.join(', ')}`;
};

['geolocation', 'microphone', 'fullscreen'].forEach((f) => console.log(describeFeature(f)));
geolocation: erlaubt für https://www.meine-seite.de microphone: gesperrt fullscreen: für alle Ursprünge erlaubt

Richtlinie eines eingebetteten iframes prüfen

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

frame.addEventListener('load', () => {
  const allowlist = frame.featurePolicy?.getAllowlistForFeature('geolocation') ?? [];
  console.log('Geolocation im iframe:', allowlist);
});
Geolocation im iframe: ["https://widget.example.com"]

// Wichtig · Fallstricke

  • Kompatibilität: Die gesamte FeaturePolicy-API ist experimentell und nur in Chromium-basierten Browsern verfügbar. Firefox und Safari unterstützen sie nicht – immer per 'featurePolicy' in document bzw. optionaler Verkettung (?.) prüfen.
  • Veraltet/Umbenennung: Feature Policy wurde in Permissions Policy umbenannt. Der Header heißt inzwischen Permissions-Policy mit anderer Syntax (camera=(self) statt camera 'self'). Die geplante Nachfolge-API document.permissionsPolicy ist noch nicht breit verfügbar; der Name der JS-Schnittstelle kann sich ändern.
  • Die Allowlist sagt nur etwas über die Richtlinie aus, nicht über die Nutzerberechtigung. Ob der Nutzer z. B. den Kamerazugriff gewährt hat, ermittelt man mit navigator.permissions.query().
  • Bei unbekannten Feature-Namen wird keine Exception geworfen, sondern ein leeres Array zurückgegeben – Tippfehler bleiben so leicht unbemerkt. Unterstützte Namen liefert features().
  • Nicht als Sicherheitsmechanismus auf Client-Seite missbrauchen: Die eigentliche Durchsetzung erfolgt durch den Browser anhand des Headers.