Signatur
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
"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');
}
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)));
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);
});
// 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 documentbzw. optionaler Verkettung (?.) prüfen. - Veraltet/Umbenennung: Feature Policy wurde in Permissions Policy umbenannt. Der Header heißt inzwischen
Permissions-Policymit anderer Syntax (camera=(self)stattcamera 'self'). Die geplante Nachfolge-APIdocument.permissionsPolicyist 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.