Document: requestStorageAccessFor() Methode

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Die requestStorageAccessFor() Methode des Document Interfaces ermöglicht es Top-Level-Websites, Drittanbieter-Cookie-Zugriff im Namen von eingebetteten Inhalten anzufordern, die von einer anderen Website innerhalb desselben verwandten Website-Sets stammen. Sie gibt ein Promise zurück, das sich auflöst, wenn der Zugriff gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.

Syntax

js
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 sich mit undefined erfüllt, 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 Top-Level-Inhalt verarbeitet gerade eine Benutzeraktion wie einen Tap oder Klick (flüchtige Aktivierung), oder es wurde bereits zuvor eine Erlaubnis erteilt. Wenn die Erlaubnis zuvor nicht erteilt wurde, müssen sie innerhalb eines Benutzeraktions-basierten Ereignishandlers ausgeführt werden. Das Verhalten der Benutzeraktion hängt vom Zustand des Promise ab:

  • Wenn das Promise 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 Promise 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 wurde.

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn das aktuelle Document noch nicht aktiv ist.

NotAllowedError DOMException

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 requestedOrigin opak ist.
  • Die Top-Level- und eingebetteten Seiten nicht im selben verwandten Website-Set sind.
  • Das einbettende <iframe> ist sandboxed, und das allow-storage-access-by-user-activation Token ist nicht gesetzt.
  • Die Nutzung durch eine storage-access Berechtigungsrichtlinie blockiert wird.
  • Die Nutzung durch die Berechtigungsanfrage des Benutzeragenten zum Verwenden der API verweigert wird.
TypeError

Wird ausgelöst, wenn requestedOrigin keine gültige URL ist.

Beschreibung

Die requestStorageAccessFor() Methode adressiert Herausforderungen bei der Anwendung der Storage Access API auf Top-Level-Websites, die bilder- oder skriptübergreifende Websites verwenden, die Cookies erfordern. Sie ist relevant für Benutzeragenten, die standardmäßig den Zugriff auf Drittanbieter- und nicht partitionierte 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 direkt in eine Top-Level-Site eingebettete Quell-Ressourcen ermöglichen, die selbst keinen Speicherzugriff anfordern können, zum Beispiel <img> Elemente. Quellübergreifende Inhalte, die in <iframe>s eingebettet sind, ihre eigene Logik und Ressourcen haben und Zugriff auf Drittanbieter-Cookies benötigen, sollten Speicherzugriff über Document.requestStorageAccess() anfordern.

Um zu überprüfen, ob bereits die Erlaubnis für den Zugriff auf Drittanbieter-Cookies über requestStorageAccessFor() erteilt 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, welcher "storage-access" ist.

Der Permissions.query() Aufruf muss den eingebetteten Ursprung angeben; zum Beispiel:

js
navigator.permissions.query({
  name: "top-level-storage-access",
  requestedOrigin: "https://www.example.com",
});

Hinweis: Die Nutzung dieser Funktion kann durch eine storage-access Berechtigungsrichtlinie blockiert werden, die auf Ihrem Server festgelegt ist (dieselbe, die den Rest der Storage Access API steuert). Zusätzlich muss das Dokument weitere browserspezifische Überprüfungen bestehen, wie Zulassungslisten, Sperrlisten, geräteinterne Klassifizierung, Benutzereinstellungen oder Anti-Clickjacking Heuristiken.

Beispiele

js
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 quellenübergreifende Anfragen Cookies enthalten, wenn sie CORS / crossorigin enthalten, sodass Websites möglicherweise warten möchten, bevor eine Anfrage ausgelöst wird. Solche Anfragen müssen die Option credentials: "include" verwenden, und Ressourcen müssen das crossorigin="use-credentials" Attribut enthalten.

Zum Beispiel:

js
function checkCookie() {
  fetch("https://example.com/getcookies.json", {
    method: "GET",
    credentials: "include",
  })
    .then((response) => response.json())
    .then((json) => {
      // Do something
    });
}

Hinweis: Sehen Sie Verwenden der Storage Access API für ein umfassenderes Beispiel.

Spezifikationen

Specification
requestStorageAccessFor API
# dom-document-requeststorageaccessfor

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
requestStorageAccessFor
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.

Siehe auch