Signatur
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
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);
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());
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
// Wichtig · Fallstricke
- Nicht mit
document.querySelectorAll('iframe').lengthverwechseln:window.lengthzählt Browsing-Kontexte. Ein<iframe>, das nicht im DOM hängt oder in einem Element mitdisplay: nonesteckt, 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].lengthermitteln. - Die Eigenschaft ist schreibgeschützt. Eine globale Variable
var length = 5im klassischen Skript überschreibt sie nicht zuverlässig. Vermeiden Sielengthals globalen Bezeichner, weil er leicht mitwindow.lengthkollidiert. - Beim Zugriff über Ursprungsgrenzen hinweg sind
lengthund die Indizes erlaubt, nicht aber das DOM des Frames. Für die Kommunikation nutzen SiepostMessagemit 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.