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

FeaturePolicy.features()

Methode

Gibt ein Array mit den Namen aller Features zurück, die der User Agent über Feature Policy bzw. Permissions Policy steuern kann.

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

Signatur

FeaturePolicy.prototype.features()

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

Typ
Array<string>
Beschreibung
Ein Array mit den Namen aller vom Browser unterstützten Policy-Features. Reihenfolge und Umfang hängen vom Browser und seiner Version ab.

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');
}
Anzahl: 50 ['accelerometer', 'ambient-light-sensor', 'autoplay', 'battery', 'camera']

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'));
geolocation: erlaubt gibt-es-nicht: vom Browser nicht unterstützt

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);
}
Im iframe blockiert: ['geolocation', 'microphone', 'payment', ...]

// 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 Header Feature-Policy gilt als veraltet. Die JavaScript-Schnittstelle heißt in Chromium aber weiterhin featurePolicy. Der Nachfolger document.permissionsPolicy ist bisher nur als Entwurf spezifiziert.
  • features() sagt nichts darüber aus, ob ein Feature erlaubt ist. Dafür nutzen Sie allowsFeature() 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.