Dokument: Methode requestStorageAccessFor()
Deprecated
To be removed
This feature is pending removal from browsers. Using it now may lead to broken functionality in future updates. Following the announcement that Chrome will maintain its current approach to third-party cookies, Chrome decided to withdraw certain Privacy Sandbox features including the related website sets. >
Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern unterstützt werden und sich in Zukunft ändern oder entfernt werden können. Unter Umständen kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.
Die Methode requestStorageAccessFor() der Schnittstelle Document ermöglicht es Top-Level-Websites, im Namen eingebetteter Inhalte, die von einer anderen Website im selben Verbund zusammengehöriger Websites stammen, Zugriff auf Drittanbieter-Cookies anzufordern. Sie gibt ein Promise zurück, das erfüllt wird, wenn der Zugriff gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
Syntax
requestStorageAccessFor(requestedOrigin)
Parameter
requestedOrigin-
Ein String mit der URL des Ursprungs, für den Sie Zugriff auf Drittanbieter-Cookies anfordern.
Rückgabewert
Ein Promise, das mit undefined erfüllt wird, wenn der Zugriff auf Drittanbieter-Cookies gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
Anfragen mit requestStorageAccessFor() werden automatisch abgelehnt, sofern der Top-Level-Inhalt nicht gerade eine Nutzerinteraktion wie ein Tippen oder Klicken verarbeitet (transiente Aktivierung) oder die Berechtigung nicht bereits zuvor erteilt wurde. Wurde die Berechtigung nicht zuvor erteilt, müssen sie innerhalb eines Ereignishandlers ausgeführt werden, der durch eine Nutzerinteraktion ausgelöst wurde. Wie sich die Nutzerinteraktion auswirkt, hängt vom Zustand des Promise ab:
- Wird das Promise erfüllt (d.h. die Berechtigung wurde erteilt), wurde die Nutzerinteraktion nicht verbraucht. Das Skript kann anschließend also APIs aufrufen, die eine Nutzerinteraktion erfordern.
- Wird das Promise abgelehnt (d.h. die Berechtigung wurde nicht erteilt), wurde die Nutzerinteraktion verbraucht. Das Skript kann daher nichts mehr ausführen, was eine Nutzerinteraktion erfordert. Dies verhindert, dass Skripte
requestStorageAccessFor()erneut aufrufen, wenn die Berechtigung verweigert wurde.
Ausnahmen
InvalidStateErrorDOMException-
Wird ausgelöst, wenn das aktuelle
Documentnoch nicht aktiv ist. NotAllowedErrorDOMException-
Wird ausgelöst, wenn:
- das Fenster des Dokuments kein sicherer Kontext ist.
- das Dokument nicht das Top-Level-Dokument ist.
- das Dokument einen
null-Ursprung hat. - der angegebene
requestedOriginopak ist. - die Top-Level-Website und die eingebettete Website nicht zum selben Verbund zusammengehöriger Websites gehören.
- das einbettende
<iframe>durch eine Sandbox eingeschränkt ist und das Tokenallow-storage-access-by-user-activationnicht gesetzt ist. - die Verwendung durch eine
storage-access-Permissions Policy blockiert wird. - die Verwendung durch die Berechtigungsabfrage des User Agents für die API verweigert wird.
TypeError-
Wird ausgelöst, wenn
requestedOriginkeine gültige URL ist.
Beschreibung
Die Methode requestStorageAccessFor() hilft bei Herausforderungen, die sich bei der Einführung der Storage Access API auf Top-Level-Websites ergeben, die websiteübergreifende Bilder oder Skripte verwenden, für die Cookies erforderlich sind. Sie ist für User Agents relevant, die den Zugriff auf Drittanbieter-Cookies, die nicht partitioniert sind, standardmäßig blockieren, um den Datenschutz zu verbessern (z. B. um Tracking zu verhindern). Sie ist eine vorgeschlagene Erweiterung der Storage Access API.
requestStorageAccessFor() kann den Zugriff auf Drittanbieter-Cookies für websiteübergreifende Ressourcen ermöglichen, die direkt in eine Top-Level-Website eingebettet sind und selbst keinen Speicherzugriff anfordern können, beispielsweise <img>-Elemente. Websiteübergreifende Inhalte, die in <iframe>-Elemente eingebettet sind, über eigene Logik und Ressourcen verfügen und Zugriff auf Drittanbieter-Cookies benötigen, sollten den Speicherzugriff über Document.requestStorageAccess() anfordern.
Um zu prüfen, ob die Berechtigung zum Zugriff auf Drittanbieter-Cookies bereits über requestStorageAccessFor() erteilt wurde, können Sie Permissions.query() mit dem Funktionsnamen "top-level-storage-access" aufrufen. Dieser unterscheidet sich vom Funktionsnamen "storage-access", der für die reguläre Methode Document.requestStorageAccess() verwendet wird.
Beim Aufruf von Permissions.query() muss der eingebettete Ursprung angegeben werden, zum Beispiel:
navigator.permissions.query({
name: "top-level-storage-access",
requestedOrigin: "https://www.example.com",
});
Hinweis:
Die Verwendung dieser Funktion kann durch eine auf Ihrem Server festgelegte storage-access-Permissions Policy blockiert werden (dieselbe, die den übrigen Teil der Storage Access API steuert). Außerdem muss das Dokument zusätzliche browserspezifische Prüfungen bestehen, etwa anhand von Zulassungslisten, Sperrlisten, einer Klassifizierung auf dem Gerät, Nutzereinstellungen oder Heuristiken gegen Clickjacking.
Beispiele
function rSAFor() {
if ("requestStorageAccessFor" in document) {
document.requestStorageAccessFor("https://example.com").then(
(res) => {
// Use storage access
doThingsWithCookies();
},
(err) => {
// Handle errors
},
);
}
}
Nach einem erfolgreichen Aufruf von requestStorageAccessFor() enthalten websiteübergreifende Anfragen Cookies, wenn sie CORS / crossorigin verwenden. Websites sollten daher gegebenenfalls warten, bevor sie eine Anfrage auslösen. Solche Anfragen müssen die Option credentials: "include" verwenden, und Ressourcen müssen das Attribut crossorigin="use-credentials" enthalten.
Zum Beispiel:
function checkCookie() {
fetch("https://example.com/getcookies.json", {
method: "GET",
credentials: "include",
})
.then((response) => response.json())
.then((json) => {
// Do something
});
}
Hinweis: Ein ausführlicheres Beispiel finden Sie unter Verwendung der Storage Access API.