Start · Sprachen · JavaScript · Referenz · Window.length

Window.length

Eigenschaft

Gibt die Anzahl der Frames (<code>&lt;iframe&gt;</code>- oder <code>&lt;frame&gt;</code>-Elemente) zurück, die direkt im aktuellen Fenster eingebettet sind.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

window.length

Beschreibung

window.length ist eine schreibgeschützte Eigenschaft. Sie liefert, wie viele Browsing-Kontexte direkt im Fenster verschachtelt sind, also wie viele <iframe>-, <frame>- und ggf. <object>/<embed>-Elemente ein eigenes Dokument laden. Gezählt wird nur die direkte Ebene. Frames, die in einem Frame stecken, zählen nicht mit.

Der Wert passt zur Array-ähnlichen Schnittstelle von window.frames. Da window.frames === window gilt, erreichen Sie einzelne Frames über window[0], window[1] usw. Sie erhalten dabei jeweils das WindowProxy-Objekt des Frames und nicht das DOM-Element.

Nützlich ist die Eigenschaft, um alle eingebetteten Frames zu durchlaufen, zum Beispiel für postMessage-Nachrichten an alle Widgets. Außerdem können Sie damit prüfen, ob eine Seite überhaupt Frames enthält. Die Eigenschaft funktioniert auch über Ursprungsgrenzen hinweg: Die Anzahl der Frames eines fremden Fensters lässt sich lesen, sein Inhalt aber nicht.

Rückgabewert

Typ
number
Beschreibung
Ganzzahl ≥ 0 mit der Anzahl der direkt eingebetteten Frames. 0, wenn keine Frames vorhanden sind.

Beispiele

Anzahl der Frames ermitteln

// HTML: <iframe src="/a.html"></iframe><iframe src="/b.html"></iframe>
const anzahl = window.length;
console.log(`Die Seite enthält ${anzahl} Frame(s).`);
console.log(window.length === window.frames.length);
Die Seite enthält 2 Frame(s). true

Nachricht an alle eingebetteten Frames senden

const broadcast = (daten, zielOrigin = 'https://widgets.example.com') => {
  for (let i = 0; i < window.length; i++) {
    // window[i] ist das WindowProxy-Objekt des Frames
    window[i].postMessage(daten, zielOrigin);
  }
};

broadcast({ typ: 'theme', wert: 'dark' });

Frames eines Frames zählen (verschachtelt)

// Nur die direkte Ebene wird gezählt – für alle Ebenen rekursiv zählen:
const zaehleAlleFrames = (win = window) => {
  let summe = win.length;
  for (let i = 0; i < win.length; i++) {
    summe += zaehleAlleFrames(win[i]); // length ist auch cross-origin lesbar
  }
  return summe;
};

console.log('Frames insgesamt:', zaehleAlleFrames());
Frames insgesamt: 3

Dynamisch hinzugefügtes iframe

console.log(window.length); // 0
const iframe = document.createElement('iframe');
iframe.src = 'about:blank';
document.body.append(iframe);
console.log(window.length); // sofort nach dem Einfügen im DOM
0 1

// Wichtig · Fallstricke

  • Nicht mit document.querySelectorAll('iframe').length verwechseln: window.length zählt Browsing-Kontexte. Ein <iframe>, das nicht im DOM hängt oder in einem Element mit display: none steckt, kann trotzdem mitzählen. Ein nicht angehängtes Element zählt dagegen nicht.
  • Die Zählung umfasst nur die direkte Ebene. Verschachtelte Frames müssen Sie rekursiv über window[i].length ermitteln.
  • Die Eigenschaft ist schreibgeschützt. Eine globale Variable var length = 5 im klassischen Skript überschreibt sie nicht zuverlässig. Vermeiden Sie length als globalen Bezeichner, weil er leicht mit window.length kollidiert.
  • Beim Zugriff über Ursprungsgrenzen hinweg sind length und die Indizes erlaubt, nicht aber das DOM des Frames. Für die Kommunikation nutzen Sie postMessage mit einem expliziten Ziel-Origin, niemals '*' bei sensiblen Daten.
  • <frame>/<frameset> sind veraltet. Unterstützt wird die Eigenschaft von allen Browsern, aber sie ist in Node.js nicht vorhanden.