Start · Sprachen · JavaScript · Referenz · Document.contentType

Document.contentType

Eigenschaft

Die schreibgeschützte Eigenschaft <code>Document.contentType</code> liefert den MIME-Typ, mit dem das Dokument gerendert wird, etwa <code>"text/html"</code> oder <code>"image/svg+xml"</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 36+, Firef Kategorie: webapi

Signatur

Document.contentType

Beschreibung

document.contentType gibt den MIME-Typ des aktuellen Dokuments als String zurück. Der Wert stammt normalerweise aus dem HTTP-Header Content-Type, allerdings ohne Parameter wie charset. Bei Dokumenten, die per Skript erzeugt wurden (z. B. mit DOMParser oder document.implementation.createDocument()), richtet er sich nach der Art der Erzeugung.

Nützlich ist die Eigenschaft, wenn ein Skript in verschiedenen Kontexten laufen kann: in einem normalen HTML-Dokument, einem eigenständigen SVG-Dokument, einem XHTML-Dokument (application/xhtml+xml) oder einer im Browser angezeigten XML-Datei. Je nach Typ gelten andere Parser-Regeln. In XML-Dokumenten zum Beispiel wird bei Element- und Attributnamen die Groß-/Kleinschreibung unterschieden, und document.write() ist dort nicht erlaubt.

Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert, im Strict Mode wirft sie einen TypeError, weil nur ein Getter existiert.

Rückgabewert

Typ
string
Beschreibung
Der MIME-Typ des Dokuments ohne Parameter, z. B. "text/html", "application/xhtml+xml", "image/svg+xml", "application/xml" oder "text/plain".

Beispiele

MIME-Typ des aktuellen Dokuments ausgeben

// In einer normal ausgelieferten HTML-Seite
console.log(document.contentType);
text/html

Code je nach Dokumenttyp unterschiedlich ausführen

const isXmlDocument = () => {
  const type = document.contentType;
  return type === 'application/xhtml+xml' ||
         type === 'image/svg+xml' ||
         type.endsWith('/xml') ||
         type.endsWith('+xml');
};

const insertMarkup = (html) => {
  if (isXmlDocument()) {
    // In XML-Dokumenten ist document.write() verboten, außerdem muss der Namespace stimmen
    const p = document.createElementNS('http://www.w3.org/1999/xhtml', 'p');
    p.textContent = html;
    document.documentElement.append(p);
  } else {
    document.body.insertAdjacentHTML('beforeend', html);
  }
};

insertMarkup('<p>Hallo Welt</p>');

Typ von per DOMParser erzeugten Dokumenten

const parser = new DOMParser();

const htmlDoc = parser.parseFromString('<p>Hi</p>', 'text/html');
const svgDoc = parser.parseFromString(
  '<svg xmlns="http://www.w3.org/2000/svg"></svg>',
  'image/svg+xml'
);
const xmlDoc = document.implementation.createDocument(null, 'root');

console.log(htmlDoc.contentType);
console.log(svgDoc.contentType);
console.log(xmlDoc.contentType);
text/html image/svg+xml application/xml

// Wichtig · Fallstricke

  • Kein Zeichensatz: Parameter wie ; charset=utf-8 sind nicht enthalten. Die Zeichenkodierung liefert document.characterSet.
  • Schreibgeschützt: Zuweisungen haben keine Wirkung. Im Strict Mode führen sie zu einem TypeError.
  • Wert kommt vom Server: Sendet der Server einen falschen Content-Type, spiegelt contentType genau diesen wider. Eine HTML-Datei, die als text/plain ausgeliefert wird, erscheint dann als reiner Text, und die Eigenschaft meldet "text/plain".
  • Für eine Prüfung, ob HTML- oder XML-Regeln gelten, ist contentType genauer als document.doctype oder document.compatMode.
  • Kompatibilität: In allen aktuellen Browsern verfügbar. Der Internet Explorer unterstützt die Eigenschaft nicht, dort gab es nur das nicht standardisierte document.mimeType mit anderen Werten.