Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Fenced Frame API
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Warnung: Dieses Feature wird derzeit von einem Browser-Anbieter abgelehnt. Details finden Sie im Abschnitt Standards Positionen unten.
Die Fenced Frame API bietet Funktionalität zur Steuerung von Inhalten, die in <fencedframe>-Elementen eingebettet sind.
Konzepte und Verwendung
Eine Hauptquelle von Datenschutz- und Sicherheits-problemen im Web sind Inhalte, die in <iframe>-Elementen eingebettet sind. Historisch gesehen wurden <iframe>s verwendet, um Cookies von Drittanbietern zu setzen, die benutzt werden können, um Informationen zu teilen und Benutzer über Websites hinweg zu verfolgen. Darüber hinaus kann der in einem <iframe> eingebettete Inhalt mit dem einbettenden Dokument kommunizieren (zum Beispiel mit Window.postMessage()).
Das einbettende Dokument kann auch Skripte verwenden, um verschiedene Formen von Informationen aus dem <iframe> zu lesen — beispielsweise können Sie potenziell signifikante Tracking/Fingerprinting-Daten erhalten, indem Sie die eingebettete URL aus der src-Eigenschaft lesen, besonders wenn sie URL-Parameter enthält. Das <iframe> kann auch auf den DOM des einbettenden Kontexts zugreifen und umgekehrt.
Die meisten modernen Browser arbeiten an Mechanismen zur Speicherpartitionierung, sodass Cookie-Daten nicht mehr zum Tracking verwendet werden können (siehe zum Beispiel Cookies Having Independent Partitioned State (CHIPS) oder Firefox State Partitioning).
<fencedframe>-Elemente zielen darauf ab, ein weiteres Stück dieses Puzzles zu lösen — sie sind <iframe>s in Form und Funktion sehr ähnlich, außer dass:
- Kommunikation nicht zwischen dem
<fencedframe>-Inhalt und seiner einbettenden Website geteilt werden kann. - Ein
<fencedframe>kann auf cross-site-Daten zugreifen, allerdings nur unter einer sehr spezifischen Reihe von kontrollierten Umständen, die die Privatsphäre der Benutzer wahren. - Ein
<fencedframe>kann nicht frei manipuliert oder über reguläre Skripte seine Daten abgerufen werden (zum Beispiel das Lesen oder Setzen der Quell-URL).<fencedframe>-Inhalte können nur über spezifische APIs eingebettet werden. - Ein
<fencedframe>kann nicht auf den DOM des einbettenden Kontexts zugreifen, und der einbettende Kontext kann auch nicht auf den DOM des<fencedframe>zugreifen.
Für weitere Informationen über das Kommunikationsmodell von fenced frames lesen Sie den Leitfaden zur Kommunikation mit eingebetteten Rahmen.
Anwendungsfälle
<fencedframe>s werden von anderen APIs verwendet, um verschiedene Arten von Cross-Site-Inhalten einzubetten oder Daten zu sammeln, wobei unterschiedliche Anwendungsfälle auf eine datenschutzfreundliche Weise erfüllt werden. Die meisten dieser Anwendungsfälle stützten sich zuvor auf Cookies von Drittanbietern oder andere Mechanismen, die schlecht für den Datenschutz waren.
- Die Shared Storage API bietet Zugriff auf unpartitionierte cross-site-Daten in einer sicheren Umgebung, um Ergebnisse zu berechnen und/oder in einem
<fencedframe>anzuzeigen. Beispielsweise:- Werbetreibende können die Reichweite einer Anzeige messen oder nachfolgende Anzeigen basierend darauf servieren, welche Nutzer bereits auf anderen Websites gesehen haben.
- Entwickler können A/B-Tests durchführen und Varianten basierend auf einer Gruppe, der sie zugewiesen wurden, oder basierend darauf, wie viele Benutzer bereits jeden gesehen haben, anzeigen.
- Unternehmen können die Benutzererfahrung basierend darauf anpassen, was diese auf anderen Websites gesehen haben. Beispielsweise, wenn sie bereits eine Mitgliedschaft erworben haben, möchten Sie ihnen möglicherweise keine Anmeldungen für Mitgliedschaften über Ihre anderen Immobilien anzeigen.
- Die Protected Audience API ermöglicht es Entwicklern, interessensbasierte Werbung zu implementieren, namentlich Remarketing und benutzerdefinierte Zielgruppennutzung. Sie kann mehrere Gebote für Anzeigenplatz evaluieren und die gewinnende Anzeige in einem
<fencedframe>anzeigen. - Die Private Aggregation API kann Daten aus
<fencedframe>s (stammend von Shared Storage oder der Protected Audience API) sammeln und aggregierte Berichte erstellen.
Wie funktionieren <fencedframe>s?
Wie oben erwähnt, steuern Sie den in einem <fencedframe> eingebetteten Inhalt nicht direkt über reguläre Skripte.
Um festzulegen, welcher Inhalt in einem <fencedframe> angezeigt wird, generiert eine nutzende API (wie Protected Audience oder Shared Storage) ein FencedFrameConfig-Objekt, das dann über JavaScript als Wert der HTMLFencedFrameElement.config-Eigenschaft des <fencedframe> gesetzt wird.
Das folgende Beispiel erhält eine FencedFrameConfig von einer Anzeigenauktion der Protected Audience API, die dann verwendet wird, um die gewinnende Anzeige in einem <fencedframe> anzuzeigen:
const frameConfig = await navigator.runAdAuction({
// ... auction configuration
resolveToConfig: true,
});
const frame = document.createElement("fencedframe");
frame.config = frameConfig;
resolveToConfig: true muss im runAdAuction()-Aufruf übergeben werden, um ein FencedFrameConfig-Objekt zu erhalten. Wenn resolveToConfig auf false gesetzt ist, wird der resultierende Promise in einer undurchsichtigen URN (zum Beispiel urn:uuid:c36973b5-e5d9-de59-e4c4-364f137b3c7a) aufgelöst, die nur in einem <iframe> verwendet werden kann.
Wie auch immer, der Browser speichert eine URL, die den Zielort des eingebetteten Inhalts enthält — zugeordnet zur undurchsichtigen URN oder der internen url-Eigenschaft der FencedFrameConfig. Der URL-Wert kann nicht von JavaScript gelesen werden, das im einbettenden Kontext läuft.
Hinweis:
Für undurchsichtige URNs in <iframe>s wird Unterstützung geboten, um die Migration bestehender Implementierungen zu den Privacy Sandbox-APIs zu erleichtern. Diese Unterstützung ist als temporär gedacht und wird entfernt, sobald die Akzeptanz wächst.
Hinweis:
FencedFrameConfig hat eine setSharedStorageContext()-Methode, die verwendet wird, um Daten aus dem einbettenden Dokument zum <fencedframe>'s Shared Storage zu übertragen. Es könnte zum Beispiel in einem Worklet über das <fencedframe> abgerufen und verwendet werden, um einen Bericht zu generieren. Siehe die Shared Storage API für weitere Details.
Zugriff auf die Funktionalität des fenced frame über das Fence-Objekt
Innerhalb von Dokumenten, die in <fencedframe>s eingebettet sind, hat JavaScript Zugriff auf eine Window.fence-Eigenschaft, die eine Fence-Instanz für dieses Dokument zurückgibt. Dieses Objekt enthält mehrere Funktionen, die speziell für die Funktionalität der Fenced Frame API relevant sind.
Zum Beispiel bietet Fence.reportEvent() eine Möglichkeit, die Übermittlung von Berichterstattungsdaten über einen Beacon an eine oder mehrere angegebene URLs auszulösen, um Anzeigenansichten und Klicks zu melden.
Berechtigungspolitik
Nur spezifische Funktionen, die für die Verwendung in <fencedframe>s ausgelegt sind, können über Berechtigungspolitiken aktiviert werden, die auf ihnen festgelegt werden; andere durch Richtlinien kontrollierte Funktionen sind in diesem Kontext nicht verfügbar. Siehe Berechtigungspolitiken, die für fenced frames verfügbar sind für weitere Details.
HTTP-Header
Ein Sec-Fetch-Dest-Header mit einem Wert von fencedframe wird für alle Anfragen gesetzt, die von innerhalb eines <fencedframe>s gemacht werden, inklusive eingebetteter <iframe>s innerhalb eines <fencedframe>.
Sec-Fetch-Dest: fencedframe
Der Server muss einen Supports-Loading-Mode-Antwortheader mit einem Wert von fenced-frame für jedes Dokument setzen, das in ein <fencedframe> oder <iframe>, das in einem <fencedframe> eingebettet ist, geladen werden soll.
Supports-Loading-Mode: fenced-frame
Weitere Auswirkungen von fenced frames auf HTTP-Header sind wie folgt:
- User-agent client hints sind innerhalb von fenced frames nicht verfügbar, da sie auf Permissions Policy-Delegierung beruhen, die zur Datenweitergabe genutzt werden könnte.
- Strikte
Cross-Origin-Opener-Policy-Einstellungen werden auf neue Browsing-Kontexte, die von innerhalb von fenced frames geöffnet werden, durchgesetzt, da sie sonst genutzt werden könnten, um Informationen an andere Ursprünge zu leaken. Jedes neue Fenster, das von innerhalb eines fenced frames geöffnet wird, wird mitrel="noopener"undCross-Origin-Opener-Policy: same-origingesetzt, um sicherzustellen, dassWindow.openernullzurückgibt und es in seiner eigenen Browsing-Kontextgruppe platziert. Content-Security-Policy: fenced-frame-srcwurde hinzugefügt, um gültige Quellen für verschachtelte Browsing-Kontexte festzulegen, die in<fencedframe>-Elementen geladen sind.Content-Security-Policy: sandboxbenutzerdefinierte Einstellungen können nicht von fenced frames geerbt werden, um Datenschutzprobleme zu mindern. Um ein fenced frame zu laden, müssen Sie keinesandbox-CSP (die die folgenden Werte impliziert) angeben oder die folgenden sandbox-Werte angeben:allow-same-originallow-formsallow-scriptsallow-popupsallow-popups-to-escape-sandboxallow-top-navigation-by-user-activation
beforeunload und unload-Events
beforeunload und unload-Events werden nicht auf fenced frames ausgelöst, da sie Informationen in Form eines Seitenlöschungszeitstempels leaken können. Implementierungen zielen darauf ab, so viele potenzielle Lecks wie möglich zu beseitigen.
Schnittstellen
FencedFrameConfig-
Repräsentiert die Navigation eines
<fencedframe>, d.h. was darin angezeigt wird. EineFencedFrameConfigwird von einer Quelle wie der Protected Audience API zurückgegeben und als Wert vonHTMLFencedFrameElement.configgesetzt. Fence-
Enthält mehrere Funktionen, die für die Funktionalität eines Fenced Frame relevant sind. Verfügbar nur für Dokumente, die in einem
<fencedframe>eingebettet sind. HTMLFencedFrameElement-
Repräsentiert ein
<fencedframe>-Element in JavaScript und bietet Eigenschaften zur Konfiguration.
Erweiterungen für andere Schnittstellen
-
Ersetzt angegebene Zeichenfolgen innerhalb der zugeordneten URL, die einer gegebenen opaken URN oder der internen
url-Eigenschaft vonFencedFrameConfigentspricht. Window.fence-
Gibt ein
Fence-Objekt für den aktuellen Dokumentenkontext zurück. Nur verfügbar für Dokumente, die in einem<fencedframe>eingebettet sind.
Registrierung und lokale Tests
Bestimmte API-Funktionen, die FencedFrameConfigs erstellen, wie Navigator.runAdAuction() (Protected Audience API) und WindowSharedStorage.selectURL() (Shared Storage API), sowie andere Funktionen wie Fence.reportEvent(), erfordern, dass Sie Ihre Website in einem Registrierungsprozess für die Privacy Sandbox anmelden. Wenn Sie dies nicht tun, schlagen die API-Aufrufe mit einer Konsolenwarnung fehl.
Hinweis: In Chrome können Sie Ihren fenced frame-Code weiterhin lokal testen, ohne sich anzumelden. Um lokale Tests zu ermöglichen, aktivieren Sie den folgenden Chrome-Entwickler-Flag:
chrome://flags/#privacy-sandbox-enrollment-overrides
Beispiele
Die folgenden Demos verwenden alle <fencedframe>s:
- Shared Storage API-Demos (die auch einige Beispiele für die Private Aggregation API enthalten)
- Protected Audience API-Demo
Spezifikationen
| Spezifikation |
|---|
| Fenced Frame> # the-fencedframe-element> |
Standards Positionen
Ein Browser-Anbieter lehnt diese Spezifikation ab. Bekannte Standards-Positionen sind wie folgt:
- Mozilla (Firefox): Negativ
Browser-Kompatibilität
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Siehe auch
- Fenced frames auf privacysandbox.google.com
- Die Privacy Sandbox auf privacysandbox.google.com