Start · Sprachen · JavaScript · Referenz · Document.defaultView

Document.defaultView

Eigenschaft

Gibt das <code>window</code>-Objekt zurück, das mit dem Dokument verknüpft ist, oder <code>null</code>, wenn keines existiert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

get Document.defaultView

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

Typ
Window | null
Beschreibung
Das zum Dokument gehörende Window-Objekt oder null, wenn das Dokument keinen Browsing-Kontext hat.

Beispiele

Im Hauptdokument: identisch mit window

console.log(document.defaultView === window);
true

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'));
block

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
true false 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);
null null

// Wichtig · Fallstricke

  • Immer auf null prüfen, wenn das Dokument nicht sicher das aktuelle ist. Das gilt für geparste Dokumente, Template-Inhalte und entfernte iframes. Sonst droht ein TypeError.
  • Realm-Falle: Jedes Fenster hat eigene globale Konstruktoren. Bei Knoten aus einem anderen Fenster schlägt instanceof deshalb fehl. Nutze dann node.ownerDocument.defaultView.HTMLElement.
  • Bei Dokumenten mit fremdem Ursprung kommt man gar nicht erst an das Dokument heran (contentDocument ist null). Für die Kommunikation mit solchen Fenstern gibt es postMessage().
  • Alte Firefox-Versionen vor Version 4 verlangten document.defaultView.getComputedStyle() statt window.getComputedStyle(). Heute ist beides gleichwertig. Die Eigenschaft wird in allen modernen Browsern unterstützt.
  • In Node.js gibt es kein document. In jsdom liefert dom.window.document.defaultView das jsdom-Fenster.