Signatur
Beschreibung
document.defaultView ist eine schreibgeschützte Eigenschaft. Sie liefert das Browsing-Context-Fenster (Window) zu einem Dokument. Im normalen Seitenkontext gilt document.defaultView === window.
Nützlich ist die Eigenschaft vor allem, wenn man mit einem fremden Dokument arbeitet und das dazugehörige Fenster braucht. Das ist zum Beispiel der Fall bei einem <iframe>, bei einem Popup oder wenn man von einem beliebigen DOM-Knoten über node.ownerDocument.defaultView zum passenden Fenster kommen will. So nutzt man die richtigen Konstruktoren (HTMLElement, Event) und die richtige getComputedStyle()-Funktion dieses Fensters.
Dokumente, die nicht in einem Browsing-Kontext angezeigt werden, geben null zurück. Dazu gehören Dokumente aus DOMParser, document.implementation.createHTMLDocument(), XMLHttpRequest.responseXML und die Dokumente von <template>-Inhalten. Auch das Dokument eines entfernten iframes gibt null zurück.
Rückgabewert
Window-Objekt oder null, wenn das Dokument keinen Browsing-Kontext hat.Beispiele
Im Hauptdokument: identisch mit window
console.log(document.defaultView === window);
Berechnete Styles über das richtige Fenster ermitteln
// Funktioniert auch für Elemente in iframes oder Popups
const getStyle = (el, prop) => {
const view = el.ownerDocument.defaultView;
return view ? view.getComputedStyle(el).getPropertyValue(prop) : '';
};
console.log(getStyle(document.body, 'display'));
Fenster eines gleichen-Ursprungs-iframes erreichen
const iframe = document.createElement('iframe');
iframe.src = 'about:blank';
document.body.append(iframe);
const innerDoc = iframe.contentDocument;
const innerWin = innerDoc.defaultView;
console.log(innerWin === iframe.contentWindow); // true
// Element mit dem Konstruktor des iframe-Fensters prüfen
const div = innerDoc.createElement('div');
console.log(div instanceof HTMLElement); // false (anderes Realm)
console.log(div instanceof innerWin.HTMLElement); // true
Dokumente ohne Browsing-Kontext liefern null
const parsed = new DOMParser().parseFromString('<p>Hallo</p>', 'text/html');
console.log(parsed.defaultView);
const tpl = document.createElement('template');
console.log(tpl.content.ownerDocument.defaultView);
// Wichtig · Fallstricke
- Immer auf
nullprüfen, wenn das Dokument nicht sicher das aktuelle ist. Das gilt für geparste Dokumente, Template-Inhalte und entfernte iframes. Sonst droht einTypeError. - Realm-Falle: Jedes Fenster hat eigene globale Konstruktoren. Bei Knoten aus einem anderen Fenster schlägt
instanceofdeshalb fehl. Nutze dannnode.ownerDocument.defaultView.HTMLElement. - Bei Dokumenten mit fremdem Ursprung kommt man gar nicht erst an das Dokument heran (
contentDocumentistnull). Für die Kommunikation mit solchen Fenstern gibt espostMessage(). - Alte Firefox-Versionen vor Version 4 verlangten
document.defaultView.getComputedStyle()stattwindow.getComputedStyle(). Heute ist beides gleichwertig. Die Eigenschaft wird in allen modernen Browsern unterstützt. - In Node.js gibt es kein
document. In jsdom liefertdom.window.document.defaultViewdas jsdom-Fenster.