Start · Sprachen · JavaScript · Referenz · Window.credentialless

Window.credentialless

Eigenschaft

Schreibgeschützter <code>boolean</code>, der angibt, ob das aktuelle Dokument in einem <em>credentialless</em> iframe mit eigenem, temporärem Kontext geladen wurde.

seit JavaScript Chromium 110+ (Chrome, Edge, Opera); experimentell Kategorie: webapi

Signatur

Window.credentialless

Beschreibung

Die Eigenschaft window.credentialless gibt true zurück, wenn das aktuelle Dokument in einem iframe mit dem Attribut credentialless geladen wurde. Ein solches Dokument läuft in einem neuen, kurzlebigen Kontext: Es hat keinen Zugriff auf die Cookies, den localStorage, die IndexedDB oder den Cache seines Ursprungs. Stattdessen bekommt es einen eigenen, leeren Speicher. Dieser Speicher wird gelöscht, sobald die übergeordnete Seite geschlossen wird. Der Wert ist schreibgeschützt.

Credentialless iframes sind vor allem für Seiten gedacht, die Cross-Origin-Isolation brauchen (Cross-Origin-Embedder-Policy: require-corp bzw. credentialless), zum Beispiel für SharedArrayBuffer oder genaue Zeitmessungen mit performance.now(). Sie sollen trotzdem Inhalte von Drittanbietern einbetten können, die keinen Cross-Origin-Resource-Policy-Header senden, etwa Werbung oder Widgets. Weil keine Zugangsdaten mitgeschickt werden, kann das eingebettete Dokument keine nutzerbezogenen Daten preisgeben.

Für eingebettete Skripte ist die Eigenschaft nützlich, um festzustellen, ob sie gerade ohne Anmeldung laufen. Ein Widget kann dann zum Beispiel auf die Anzeige für angemeldete Nutzer verzichten, einen Hinweis zeigen oder auf eine andere Art der Authentifizierung ausweichen, etwa ein Pop-up-Fenster.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Dokument in einem credentialless iframe läuft, sonst false. In Browsern ohne diese Funktion ist die Eigenschaft undefined.

Beispiele

Einfache Abfrage mit Funktionserkennung

// Im Dokument innerhalb des iframes ausführen
if ('credentialless' in window) {
  console.log('credentialless:', window.credentialless);
} else {
  console.log('Credentialless iframes werden nicht unterstützt.');
}
credentialless: true

Credentialless iframe erzeugen und prüfen

// Übergeordnete Seite (Same-Origin-Inhalt, damit der Zugriff erlaubt ist)
const iframe = document.createElement('iframe');
iframe.credentialless = true; // entspricht <iframe credentialless>
iframe.src = '/widget.html';

iframe.addEventListener('load', () => {
  console.log('Kind-Dokument credentialless:', iframe.contentWindow.credentialless);
});

document.body.append(iframe);
Kind-Dokument credentialless: true

Widget passt sich an fehlende Anmeldung an

// Skript im eingebetteten Widget
const initWidget = async () => {
  if (window.credentialless === true) {
    // Keine Cookies verfügbar – Anmeldung per Pop-up anbieten
    const btn = document.createElement('button');
    btn.textContent = 'Anmelden';
    btn.addEventListener('click', () => {
      window.open('https://widget.example/login', '_blank', 'popup');
    });
    document.body.append(btn);
    return;
  }

  const res = await fetch('/api/me', { credentials: 'include' });
  const user = await res.json();
  document.body.textContent = `Hallo, ${user.name}!`;
};

initWidget();

// Wichtig · Fallstricke

  • Kompatibilität: Experimentell und bisher nur in Chromium-Browsern (ab Chrome 110) verfügbar. Firefox und Safari kennen die Eigenschaft nicht, dort ergibt sie undefined. Nutzen Sie deshalb eine Funktionserkennung mit 'credentialless' in window.
  • Das Attribut credentialless muss gesetzt sein, bevor das iframe navigiert. Wird es erst nachträglich geändert, gilt das nur für die nächste Navigation.
  • Der temporäre Speicher wird nur zwischen credentialless iframes desselben Ursprungs geteilt, die zur selben übergeordneten Seite gehören. Wird diese Seite geschlossen, ist der Speicher weg. Verlassen Sie sich also nicht auf dauerhafte Daten.
  • Sicherheit: Die Eigenschaft ist kein Schutz gegen XSS oder Clickjacking. Sie zeigt nur, dass keine Zugangsdaten mitgeschickt werden. Der Wert lässt sich zwar nicht überschreiben, sicherheitskritische Entscheidungen sollten aber trotzdem auf dem Server fallen.
  • Für iframes mit credentialless ist ein Cross-Origin-Resource-Policy-Header nicht nötig, auch wenn die übergeordnete Seite COEP: require-corp verwendet.