Document: 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 Websites auf oberster Ebene, den Zugriff auf Drittanbieter-Cookies im Namen von eingebetteten Inhalten, die von einer anderen Website im selben Related Website Set stammen, anzufordern. Sie gibt ein Promise zurück, das aufgelöst wird, 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 Zugriff auf Drittanbieter-Cookies anfordern.
Rückgabewert
Ein Promise das mit undefined aufgelöst wird, wenn der Zugriff auf Drittanbieter-Cookies gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
requestStorageAccessFor() Anfragen werden automatisch abgelehnt, es sei denn, der Hauptinhalt verarbeitet derzeit eine Benutzeraktion wie einen Tipp oder Klick (transiente Aktivierung) oder die Erlaubnis wurde bereits zuvor erteilt. Wenn die Erlaubnis nicht zuvor erteilt wurde, müssen sie innerhalb eines benutzergestützten Ereignishandlers ausgeführt werden. Das Benutzeraktionsverhalten hängt vom Status des Versprechens ab:
- Wenn das Versprechen aufgelöst wird (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 Versprechen abgelehnt wird (d.h. die Erlaubnis wurde nicht erteilt), wurde die Benutzeraktion verbraucht, sodass das Skript nichts tun kann, das eine Aktion erfordert. Dies verhindert, dass Skripte
requestStorageAccessFor()erneut aufrufen, wenn die Erlaubnis verweigert wird.
Ausnahmen
InvalidStateErrorDOMException-
Ausgelöst, wenn das aktuelle
Documentnoch nicht aktiv ist. NotAllowedErrorDOMException-
Ausgelöst, wenn:
- Das Dokumentfenster ist kein sicherer Kontext.
- Das Dokument ist nicht das oberste Dokument.
- Das Dokument hat einen
nullUrsprung. - Der angegebene
requestedOriginist undurchsichtig. - Die oberste und die eingebettete Site befinden sich nicht im selben Related Website Set.
- Das einbettende
<iframe>ist mit einem Sandbox versehen, und dasallow-storage-access-by-user-activationToken ist nicht gesetzt. - Die Nutzung wird durch eine
storage-accessPermissions Policy blockiert. - Die Nutzung wird durch die Berechtigungsanfrage des Benutzeragenten zur Verwendung der API verweigert.
TypeError-
Ausgelöst, wenn
requestedOriginkeine gültige URL ist.
Beschreibung
Die requestStorageAccessFor() Methode adressiert Herausforderungen bei der Einführung der Storage Access API auf Websites auf oberster Ebene, die standortübergreifende Bilder oder Skripte 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 das Tracking zu verhindern), und ist eine vorgeschlagene Erweiterung der Storage Access API.
requestStorageAccessFor() kann den Zugriff auf Drittanbieter-Cookies für standortübergreifende Ressourcen, die direkt in eine Website auf oberster Ebene eingebettet sind und selbst keinen Speicherzugriff anfordern können, aktivieren, zum Beispiel <img>-Elemente. Standortübergreifende Inhalte, die in <iframe>s eingebettet sind und über eigene Logik und Ressourcen verfügen sowie Zugriff auf Drittanbieter-Cookies benötigen, sollten über Document.requestStorageAccess() Speicherzugriff anfordern.
Um zu überprüfen, ob die Erlaubnis zum Zugriff auf Drittanbieter-Cookies bereits über requestStorageAccessFor() gewährt wurde, können Sie Permissions.query() aufrufen und den Feature-Namen "top-level-storage-access" angeben. Dies unterscheidet sich vom Feature-Namen, der für die reguläre Document.requestStorageAccess() Methode verwendet wird, der "storage-access" lautet.
Der Permissions.query() Aufruf muss den eingebetteten Ursprung angeben; zum Beispiel:
navigator.permissions.query({
name: "top-level-storage-access",
requestedOrigin: "https://www.example.com",
});
Hinweis:
Die Nutzung dieser Funktion kann durch eine auf Ihrem Server gesetzte storage-access Permissions Policy blockiert werden (dieselbe, die den Rest der Storage Access API kontrolliert). Darüber hinaus muss das Dokument zusätzliche browserspezifische Prüfungen wie Whitelists, Blacklists, auf dem Gerät durchgeführte 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 standortübergreifende Anfragen Cookies enthalten, wenn sie CORS / crossorigin beinhalten, weshalb Websites möglicherweise warten möchten, bevor sie eine Anfrage auslösen. Solche Anfragen müssen die Option credentials: "include" verwenden und Ressourcen müssen das crossorigin="use-credentials" Attribut beinhalten.
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.