Dokument: requestStorageAccessFor() Methode
Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.
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 requestStorageAccessFor()-Methode der Document-Schnittstelle ermöglicht es obersten Webseiten, den Zugriff auf Drittanbieter-Cookies im Namen von eingebetteten Inhalten anzufordern, die von einer anderen Seite im gleichen verwandten Website-Set stammen. Sie gibt ein Promise zurück, das sich erfüllt, wenn der Zugriff gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
Syntax
requestStorageAccessFor(requestedOrigin)
Parameter
requestedOrigin-
Ein String, der die URL des Ursprungs darstellt, für den Sie den Zugriff auf Drittanbieter-Cookies anfordern.
Rückgabewert
Ein Promise, das sich mit undefined erfüllt, wenn der Zugriff auf Drittanbieter-Cookies gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
Anfragen an requestStorageAccessFor() werden automatisch abgelehnt, es sei denn, der oberste Inhalt verarbeitet derzeit eine Benutzeraktion wie einen Tippen oder Klick (transient activation) oder die Erlaubnis wurde zuvor bereits erteilt. Wenn die Erlaubnis nicht zuvor erteilt wurde, müssen sie innerhalb eines ereignisbasierten Benutzeraktions-Handlers ausgeführt werden. Das Verhalten der Benutzeraktion hängt vom Status des Promises ab:
- Wenn sich das Promise erfüllt (d.h. die Erlaubnis wurde erteilt), wurde die Benutzeraktion nicht verbraucht, sodass das Skript anschließend APIs aufrufen kann, die eine Benutzeraktion erfordern.
- Wenn das Promise abgelehnt wird (d.h. die Erlaubnis wurde nicht erteilt), wurde die Benutzeraktion verbraucht, sodass das Skript nichts tun kann, was eine Aktion erfordert. Dadurch wird verhindert, dass Skripts
requestStorageAccessFor()erneut aufrufen, wenn die Erlaubnis verweigert wurde.
Ausnahmen
InvalidStateErrorDOMException-
Wird ausgelöst, wenn das aktuelle
Documentnoch nicht aktiv ist. NotAllowedErrorDOMException-
Wird ausgelöst, wenn:
- Das Fenster des Dokuments nicht ein sicherer Kontext ist.
- Das Dokument nicht das oberste Dokument ist.
- Das Dokument einen
null-Ursprung hat. - Der angegebene
requestedOriginopake ist. - Die oberste und eingebetteten Seiten nicht im gleichen verwandten Website-Set sind.
- Das einbettende
<iframe>sandboxed ist und dasallow-storage-access-by-user-activationToken nicht gesetzt ist. - Die Verwendung durch eine
storage-accessPermissions Policy blockiert wird. - Die Verwendung durch die Berechtigungsanfrage des Benutzeragentes zur Nutzung der API abgelehnt wird.
TypeError-
Wird ausgelöst, wenn
requestedOriginkeine gültige URL ist.
Beschreibung
Die Methode requestStorageAccessFor() adressiert Herausforderungen bei der Einführung der Storage Access API auf obersten Websites, die cross-site Bilder oder Skripts verwenden, die Cookies benötigen. Sie ist relevant für Benutzeragenten, die standardmäßig den Zugriff auf Drittanbieter, unpartitionierte Cookies blockieren, um die Privatsphäre zu verbessern (z.B. um Tracking zu verhindern), und ist eine vorgeschlagene Erweiterung der Storage Access API.
requestStorageAccessFor() kann den Zugriff auf Drittanbieter-Cookies für cross-site Ressourcen ermöglichen, die direkt in eine oberste Website eingebettet sind und die nicht in der Lage sind, selbst Zugriff zu beantragen, z.B. <img>-Elemente. Cross-site Inhalte, die in <iframe>s eingebettet sind, ihre eigene Logik und Ressourcen haben und Zugriff auf Drittanbieter-Cookies benötigen, sollten über Document.requestStorageAccess() Zugriff anfordern.
Um zu prüfen, ob die Erlaubnis zum Zugriff auf Drittanbieter-Cookies bereits über requestStorageAccessFor() gewährt wurde, kann Permissions.query() aufgerufen werden, wobei der Funktionsname "top-level-storage-access" angegeben wird. Dies unterscheidet sich vom Funktionsnamen der regulären Document.requestStorageAccess() Methode, der "storage-access" ist.
Der Aufruf von Permissions.query() muss den eingebetteten Ursprung spezifizieren; zum Beispiel:
navigator.permissions.query({
name: "top-level-storage-access",
requestedOrigin: "https://www.example.com",
});
Hinweis:
Die Verwendung dieser Funktion kann durch eine storage-access Permissions Policy, die auf Ihrem Server gesetzt ist (die gleiche, die den Rest der Storage Access API steuert), blockiert werden. Außerdem muss das Dokument zusätzliche browserspezifische Überprüfungen wie Allowlisten, Blocklisten, geräteinterne Klassifizierungen, Benutzereinstellungen oder Anti-Clickjacking-Heuristiken bestehen.
Beispiele
function rSAFor() {
if ("requestStorageAccessFor" in document) {
document.requestStorageAccessFor("https://example.com").then(
(res) => {
// Use storage access
doThingsWithCookies();
},
(err) => {
// Handle errors
},
);
}
}
Nach einem erfolgreichen requestStorageAccessFor()-Aufruf werden cross-site Anfragen Cookies enthalten, wenn sie CORS / crossorigin enthalten; daher möchten die Seiten möglicherweise 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: Siehe Verwendung der Storage Access API für ein vollständigeres Beispiel.