Signatur
Beschreibung
Die Methode features() des FeaturePolicy-Interfaces liefert eine Liste der Namen aller Policy-gesteuerten Features, die der Browser grundsätzlich kennt, z. B. "camera", "geolocation", "fullscreen" oder "autoplay". Die Liste zeigt nur an, was unterstützt wird. Ob ein Feature im aktuellen Dokument auch erlaubt ist, verrät sie nicht.
Erreichbar ist die Methode über document.featurePolicy (Policy des aktuellen Dokuments) oder über iframe.featurePolicy (Policy, die für einen eingebetteten Frame gilt). Die Methode braucht man vor allem für die Feature-Erkennung und zur Fehlersuche: Man prüft damit, ob ein Direktivenname wie "payment" überhaupt ausgewertet wird, bevor man einen Permissions-Policy-Header oder ein allow-Attribut darauf abstimmt.
Welche Features tatsächlich erlaubt sind, liefern allowedFeatures() und allowsFeature(). Eine gängige Diagnose besteht darin, features() mit allowedFeatures() abzugleichen. So erkennt man, welche unterstützten Features durch die aktuelle Policy blockiert werden.
Rückgabewert
Beispiele
Alle unterstützten Features auflisten
if ('featurePolicy' in document) {
const supported = document.featurePolicy.features();
console.log(`Anzahl: ${supported.length}`);
console.log(supported.slice(0, 5));
} else {
console.log('Feature Policy API wird nicht unterstützt');
}
Prüfen, ob ein Feature bekannt und erlaubt ist
const checkFeature = (name) => {
const policy = document.featurePolicy;
if (!policy) return 'API nicht verfügbar';
if (!policy.features().includes(name)) return `${name}: vom Browser nicht unterstützt`;
return policy.allowsFeature(name)
? `${name}: erlaubt`
: `${name}: durch Policy blockiert`;
};
console.log(checkFeature('geolocation'));
console.log(checkFeature('gibt-es-nicht'));
Blockierte Features in einem iframe ermitteln
const frame = document.createElement('iframe');
frame.src = 'https://example.com/widget';
frame.allow = 'fullscreen; camera';
document.body.append(frame);
const policy = frame.featurePolicy;
if (policy) {
const allowed = new Set(policy.allowedFeatures());
const blocked = policy.features().filter((f) => !allowed.has(f));
console.log('Im iframe blockiert:', blocked);
}
// Wichtig · Fallstricke
Browser-Kompatibilität: Die API ist experimentell und nicht standardisiert. Sie wird nur in Chromium-basierten Browsern unterstützt. Firefox und Safari kennen document.featurePolicy nicht. Prüfen Sie deshalb immer vorher mit 'featurePolicy' in document, ob die API vorhanden ist.
- Feature Policy wurde in Permissions Policy umbenannt. Der HTTP-Header heißt heute
Permissions-Policy. Der alte HeaderFeature-Policygilt als veraltet. Die JavaScript-Schnittstelle heißt in Chromium aber weiterhinfeaturePolicy. Der Nachfolgerdocument.permissionsPolicyist bisher nur als Entwurf spezifiziert. features()sagt nichts darüber aus, ob ein Feature erlaubt ist. Dafür nutzen SieallowsFeature()bzw.allowedFeatures().- Auch wenn ein Feature per Policy erlaubt ist, kann der Nutzer eine Berechtigung (z. B. Kamera) noch ablehnen. Den tatsächlichen Berechtigungsstatus fragen Sie über die Permissions-API ab.
- Welche Features in der Liste stehen, ändert sich mit der Browserversion. Verlassen Sie sich nicht auf eine feste Liste.