Signatur
Beschreibung
HTMLDocument war früher ein eigenes Interface für HTML-Dokumente. Es enthielt HTML-spezifische Mitglieder wie body, forms, cookie oder write(). Der heutige HTML-Standard hat all diese Mitglieder direkt in das Document-Interface verschoben. Übrig geblieben ist nur ein Name, damit ältere Skripte nicht brechen.
Laut Spezifikation hat jedes Window-Objekt eine beschreibbare, konfigurierbare und nicht aufzählbare Eigenschaft HTMLDocument. Ihr Wert ist das Document-Interface-Objekt selbst. In der Praxis setzen die Browser das unterschiedlich um: Chromium und Firefox führen HTMLDocument weiterhin als eigene Unterklasse von Document. Das normale document einer HTML-Seite ist dort also eine Instanz von HTMLDocument.
Einsatzgebiet: Den Namen HTMLDocument findet man vor allem in älterem Code, zum Beispiel bei Typprüfungen (instanceof HTMLDocument), in Polyfills oder bei Erweiterungen des Prototyps. Für neuen Code gilt: Nutze immer Document. Diese Prüfung funktioniert für HTML- und XML-Dokumente gleich und in allen Browsern.
Rückgabewert
window.HTMLDocument liefert ein Interface-Objekt. Laut Standard ist das Document selbst, in vielen Browsern eine eigene Unterklasse von Document. Es lässt sich nicht direkt instanziieren: new HTMLDocument() wirft einen TypeError.Beispiele
Ist das aktuelle Dokument ein HTML-Dokument?
// Im Browser, auf einer normalen HTML-Seite
console.log(document instanceof HTMLDocument);
console.log(document instanceof Document);
// Empfohlen für neuen Code:
const istDokument = (obj) => obj instanceof Document;
console.log(istDokument(document));
Neues HTML-Dokument erzeugen statt Konstruktor aufrufen
// new HTMLDocument() ist nicht erlaubt – dafür gibt es createHTMLDocument()
try {
new HTMLDocument();
} catch (err) {
console.log(err.name);
}
const doc = document.implementation.createHTMLDocument('Vorschau');
doc.body.innerHTML = '<p>Hallo Welt</p>';
console.log(doc.title);
console.log(doc instanceof Document);
console.log(doc.querySelector('p').textContent);
Verhalten bei XML-Dokumenten prüfen (browserabhängig)
const xml = new DOMParser().parseFromString('<daten><x>1</x></daten>', 'application/xml');
console.log(xml instanceof Document); // immer true
console.log(xml instanceof XMLDocument); // true
// Hängt vom Browser ab: true, wenn HTMLDocument === Document (Standard),
// false, wenn HTMLDocument eine eigene Unterklasse ist (z. B. Chromium)
console.log(xml instanceof HTMLDocument);
// Den Namen HTMLDocument erkennen, ohne sich auf ein Ergebnis festzulegen
console.log('Alias gemäß Standard:', window.HTMLDocument === Document);
// Wichtig · Fallstricke
- Unterschiede zwischen Browsern: Der Standard legt
window.HTMLDocument === Documentfest. Chromium und Firefox führenHTMLDocumentaber noch als eigene Unterklasse. Deshalb liefertinstanceof HTMLDocumentfür XML-Dokumente (z. B. ausDOMParsermitapplication/xml) je nach Browser ein anderes Ergebnis. Für verlässliche Prüfungeninstanceof Documentverwenden. - Kein Konstruktor:
new HTMLDocument()wirft einenTypeError. Neue Dokumente erzeugst du mitdocument.implementation.createHTMLDocument(),new Document()oderDOMParser. - Prototyp erweitern: Eigene Methoden an
HTMLDocument.prototypesind nicht in jedem Browser für jedes Dokument sichtbar. Vermeide das grundsätzlich. - TypeScript: In
lib.dom.d.tsistHTMLDocumentnur ein leeres Interface, das vonDocumenterbt. Als Typ reichtDocument. - Node.js: Node.js hat kein
HTMLDocument. Bibliotheken wie jsdom stellen eines bereit.