Start · Sprachen · JavaScript · Referenz · NotRestoredReasons.id

NotRestoredReasons.id

Eigenschaft

Schreibgeschützte Eigenschaft, die den Wert des <code>id</code>-Attributs des <code>&lt;iframe&gt;</code> enthält, in dem das Dokument liegt, oder <code>null</code>.

seit JavaScript Chrome/Edge 123+ (experimentell, nicht in Firefox/ Kategorie: webapi

Signatur

get NotRestoredReasons.id

Beschreibung

Die schreibgeschützte Eigenschaft id der Schnittstelle NotRestoredReasons gibt den Wert des id-Attributs des <iframe>-Elements zurück, das das betreffende Dokument einbettet, z. B. "werbung" bei <iframe id="werbung" src="…">. Für das Dokument der obersten Ebene oder für einen iframe ohne id-Attribut ist der Wert null.

NotRestoredReasons-Objekte erhalten Sie über PerformanceNavigationTiming.notRestoredReasons. Sie erklären, warum eine Seite nicht aus dem Back/Forward-Cache (bfcache) wiederhergestellt wurde. Das Objekt der obersten Ebene beschreibt das Hauptdokument, und seine Eigenschaft children enthält für jeden eingebetteten iframe ein eigenes NotRestoredReasons-Objekt. Mit id (zusammen mit name und src) finden Sie heraus, welcher iframe den bfcache blockiert hat.

Praktisch ist das vor allem beim Monitoring echter Nutzerdaten (RUM): Sie senden die IDs der blockierenden Frames an Ihr Analyse-Backend und finden so problematische Drittanbieter-Einbettungen, etwa Widgets mit unload-Handlern oder offenen WebSocket-Verbindungen.

Rückgabewert

Typ
string | null
Beschreibung
Der Wert des id-Attributs des einbettenden <iframe>. null beim Dokument der obersten Ebene oder wenn der iframe kein id-Attribut hat.

Beispiele

IDs aller direkt eingebetteten iframes ausgeben

const [nav] = performance.getEntriesByType('navigation');
const gruende = nav?.notRestoredReasons;

if (gruende) {
  // Oberste Ebene: id ist immer null
  console.log('Hauptdokument-id:', gruende.id);

  for (const kind of gruende.children ?? []) {
    console.log(`iframe id=${kind.id ?? '(keine)'} blockiert=${kind.blocked}`);
  }
} else {
  console.log('Keine Daten (Seite aus bfcache oder API nicht unterstützt)');
}
Hauptdokument-id: null iframe id=werbung blockiert=true iframe id=(keine) blockiert=false

Blockierende Frames rekursiv finden

const findeBlockierer = (nrr, pfad = []) => {
  const bezeichner = nrr.id ?? nrr.name ?? nrr.src ?? 'top';
  const aktuell = [...pfad, bezeichner];
  const treffer = nrr.blocked
    ? [{ pfad: aktuell.join(' > '), gruende: nrr.reasons?.map((r) => r.reason) ?? [] }]
    : [];
  return treffer.concat(
    (nrr.children ?? []).flatMap((kind) => findeBlockierer(kind, aktuell))
  );
};

const [nav] = performance.getEntriesByType('navigation');
if (nav?.notRestoredReasons) {
  console.table(findeBlockierer(nav.notRestoredReasons));
}
┌─────────┬──────────────────┬────────────────────────┐ │ (index) │ pfad │ gruende │ ├─────────┼──────────────────┼────────────────────────┤ │ 0 │ 'top > chat' │ [ 'unload-listener' ] │ └─────────┴──────────────────┴────────────────────────┘

Blockierende iframe-IDs an das Monitoring senden

addEventListener('pageshow', () => {
  const [nav] = performance.getEntriesByType('navigation');
  const nrr = nav?.notRestoredReasons;
  if (!nrr || nav.type !== 'back_forward') return;

  const blockierendeIds = (nrr.children ?? [])
    .filter((kind) => kind.blocked)
    .map((kind) => kind.id)
    .filter(Boolean);

  navigator.sendBeacon('/rum/bfcache', JSON.stringify({
    seite: location.pathname,
    hauptBlockiert: nrr.blocked,
    blockierendeIds
  }));
});

// Wichtig · Fallstricke

  • Browserunterstützung: Bisher nur in Chromium-Browsern (Chrome/Edge ab Version 123). Prüfen Sie vorher mit 'notRestoredReasons' in PerformanceNavigationTiming.prototype oder optionaler Verkettung.
  • Häufig null: Das Objekt der obersten Ebene hat immer id === null, genauso wie iframes ohne id-Attribut. Weichen Sie zur Identifikation auf name oder src aus.
  • Es wird das Attribut beim Laden gemeldet: Der Wert stammt aus dem Zustand des iframes zum Zeitpunkt der Navigation. Wird die id später per Skript geändert, passt das nicht zwingend zum aktuellen DOM.
  • Ursprungsübergreifende iframes: Aus Datenschutzgründen werden bei fremden Ursprüngen Details wie url, reasons und children zurückgehalten (null). id, name und src sind aber weiterhin sichtbar, weil sie der einbettenden Seite ohnehin bekannt sind.
  • notRestoredReasons selbst ist null, wenn die Seite tatsächlich aus dem bfcache kam oder es sich nicht um eine Vor-/Zurück-Navigation handelte.