Dokumentation: `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 der Document Schnittstelle erlaubt es Top-Level-Seiten, im Namen von eingebettetem Inhalt, der von einer anderen Seite desselben related website set stammt, Zugriff auf Drittanbieter-Cookies anzufordern. Sie gibt ein Promise zurück, das gelöst wird, 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 mit undefined erfüllt wird, wenn der Zugriff auf Drittanbieter-Cookies gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.

Anforderungen von requestStorageAccessFor() werden automatisch abgelehnt, es sei denn, der Top-Level-Inhalt verarbeitet gerade eine Benutzerinteraktion wie beispielsweise ein Tippen oder Klicken (transient activation), oder die Berechtigung wurde bereits zuvor erteilt. Wenn die Berechtigung nicht zuvor gewährt wurde, müssen sie innerhalb eines auf Benutzerinteraktionen basierenden Ereignishandlers ablaufen. Das Verhalten der Benutzerinteraktion hängt vom Zustand des Promise ab:

  • Wenn das Promise erfüllt wird (d.h. die Berechtigung wurde erteilt), wurde die Benutzerinteraktion nicht verbraucht, sodass das Skript anschließend APIs aufrufen kann, die eine Benutzerinteraktion erfordern.
  • Wenn das Promise abgelehnt wird (d.h. die Berechtigung wurde nicht erteilt), wurde die Benutzerinteraktion verbraucht, sodass das Skript nichts tun kann, was eine Interaktion erfordert. Dies verhindert, dass Skripte requestStorageAccessFor() erneut aufrufen, wenn die Berechtigung verweigert wird.

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 undurchsichtig ist.
  • Die Top-Level und eingebetteten Seiten nicht im selben related 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 Permissions Policy blockiert wird.
  • Die Nutzung durch die Berechtigungsanfrage des Benutzeragenten zur Nutzung der API verweigert wird.
TypeError

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

Beschreibung

Die requestStorageAccessFor() Methode adressiert Herausforderungen bei der Einführung der Storage Access API auf Top-Level-Seiten, die cross-site Bilder oder Skripte verwenden, die Cookies benötigen. Es ist relevant für Benutzeragenten, die standardmäßig den Zugriff auf Drittanbieter, unpartitionierte Cookies zur Verbesserung der Privatsphäre blockieren (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 Top-Level-Seite eingebettet sind und nicht selbst Speicherzugriff anfordern können, wie zum Beispiel <img> Elemente. Cross-site Inhalt, der in <iframe>s eingebettet ist und seine eigene Logik und Ressourcen hat und Zugriff auf Drittanbieter-Cookies benötigt, sollte den Speicherzugriff über Document.requestStorageAccess() anfordern.

Um zu überprüfen, ob die Berechtigung für den Zugriff auf Drittanbieter-Cookies bereits über requestStorageAccessFor() gewährt wurde, können Sie Permissions.query() aufrufen, wobei Sie 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, welche "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 Verwendung dieser Funktion kann durch eine auf Ihrem Server eingestellte storage-access Permissions Policy blockiert werden (dieselbe, die den Rest der Storage Access API kontrolliert). Zusätzlich muss das Dokument zusätzliche browserspezifische Prüfungen bestehen, wie zum Beispiel Zulassungslisten, Sperrlisten, Geräteklassifikation, 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 cross-site Anfragen Cookies enthalten, wenn sie CORS / crossorigin einschließen, daher sollten Seiten möglicherweise warten, bevor sie eine Anfrage auslösen. Solche Anfragen müssen die credentials: "include" Option 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: Siehe Verwendung der Storage Access API für ein vollständigeres Beispiel.

Spezifikationen

Specification
requestStorageAccessFor API
# dom-document-requeststorageaccessfor

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch