Start · Sprachen · JavaScript · Referenz · MimeType

MimeType

Schnittstelle

Das Interface <code>MimeType</code> beschreibt einen MIME-Typ, den ein Browser-Plugin verarbeiten kann. Heute ist es nur noch aus Kompatibilitätsgründen vorhanden.

seit JavaScript Baseline: alle Browser (veraltet, Werte seit HTML- deprecated seit ja Kategorie: webapi

Signatur

interface MimeType

Beschreibung

Ein MimeType-Objekt beschreibt einen Datentyp, den ein installiertes Plugin darstellen kann, zum Beispiel application/pdf. Du kannst solche Objekte nicht selbst erzeugen. Du erhältst sie über navigator.mimeTypes (ein MimeTypeArray) oder über ein Plugin-Objekt aus navigator.plugins.

Das Interface hat vier schreibgeschützte Eigenschaften:

  • type: der MIME-Typ als Zeichenkette, z. B. "application/pdf"
  • description: eine lesbare Beschreibung, z. B. "Portable Document Format"
  • suffixes: typische Dateiendungen als kommagetrennte Zeichenkette, z. B. "pdf"
  • enabledPlugin: das zugehörige Plugin-Objekt

Klassische Plugins wie Flash oder Java werden von modernen Browsern nicht mehr unterstützt. Deshalb schreibt der HTML-Standard inzwischen eine feste Liste vor:

  • Hat der Browser einen eingebauten PDF-Betrachter, enthält die Liste genau die Einträge application/pdf und text/pdf.
  • Andernfalls ist die Liste leer.

Die Schnittstelle taugt also nur noch dazu, bei älterem Code festzustellen, ob PDFs direkt im Browser angezeigt werden können. Für neuen Code solltest du navigator.pdfViewerEnabled verwenden.

Rückgabewert

Typ
MimeType
Beschreibung
Du kannst keine eigene Instanz erzeugen. Der Aufruf new MimeType() löst einen TypeError aus. Instanzen bekommst du nur über navigator.mimeTypes oder über ein Plugin-Objekt.

Beispiele

Alle gemeldeten MIME-Typen auflisten

// navigator.mimeTypes ist ein MimeTypeArray und lässt sich per Array.from durchlaufen
const typen = Array.from(navigator.mimeTypes, (mt) => ({
  typ: mt.type,
  beschreibung: mt.description,
  endungen: mt.suffixes,
  plugin: mt.enabledPlugin?.name ?? '(keins)'
}));

console.table(typen);
typ | beschreibung | endungen | plugin application/pdf | Portable Document Format | pdf | PDF Viewer text/pdf | Portable Document Format | pdf | PDF Viewer

PDF-Unterstützung prüfen (mit modernem Fallback)

const kannPdfAnzeigen = () => {
  // Moderne, empfohlene Variante
  if ('pdfViewerEnabled' in navigator) {
    return navigator.pdfViewerEnabled;
  }
  // Fallback für ältere Browser über das MimeType-Interface
  const mt = navigator.mimeTypes.namedItem('application/pdf');
  return mt instanceof MimeType && mt.enabledPlugin !== null;
};

const link = document.createElement('a');
link.href = '/dokumente/rechnung.pdf';
link.textContent = kannPdfAnzeigen() ? 'Rechnung ansehen' : 'Rechnung herunterladen';
if (!kannPdfAnzeigen()) link.download = 'rechnung.pdf';
document.body.append(link);

console.log('PDF-Betrachter vorhanden:', kannPdfAnzeigen());
PDF-Betrachter vorhanden: true

MimeType-Objekte eines Plugins untersuchen

for (const plugin of Array.from(navigator.plugins)) {
  console.log(`Plugin: ${plugin.name}`);
  // Ein Plugin-Objekt ist selbst eine Liste von MimeType-Objekten
  for (let i = 0; i < plugin.length; i++) {
    const mt = plugin[i];
    console.log(`  ${mt.type} (.${mt.suffixes}) – ${mt.description}`);
    console.log('  Rückverweis stimmt:', mt.enabledPlugin === plugin);
  }
}
Plugin: PDF Viewer application/pdf (.pdf) – Portable Document Format Rückverweis stimmt: true text/pdf (.pdf) – Portable Document Format Rückverweis stimmt: true (weitere Zeilen für die anderen, fest vorgegebenen Plugins wie „Chrome PDF Viewer“)

Direkte Instanziierung schlägt fehl

try {
  const mt = new MimeType();
} catch (err) {
  console.log(err.name, '-', err.message);
}
TypeError - Illegal constructor

// Wichtig · Fallstricke

  • Veraltet: Setze MimeType nicht in neuem Code ein. Für die PDF-Erkennung ist navigator.pdfViewerEnabled gedacht. Welche Dateitypen der Browser sonst unterstützt, kannst du über dieses Interface nicht zuverlässig herausfinden. Nutze dafür zum Beispiel HTMLMediaElement.canPlayType() oder MediaSource.isTypeSupported().
  • Feste Werte: Chrome, Edge, Firefox und Safari geben seit etwa 2022 nur noch die fest vorgegebenen PDF-Einträge oder eine leere Liste zurück. Welche Plugins tatsächlich installiert sind, lässt sich daraus nicht ablesen.
  • Datenschutz: Früher wurden navigator.plugins und navigator.mimeTypes stark zur Wiedererkennung von Nutzern (Fingerprinting) missbraucht. Genau deshalb sind die Werte heute fest vorgegeben. Verlasse dich nicht auf Unterschiede zwischen einzelnen Geräten.
  • Browser-Kompatibilität: In älteren Browsern und in einigen Datenschutz-Modi kann navigator.mimeTypes leer sein, obwohl ein PDF-Betrachter vorhanden ist. enabledPlugin kann dort außerdem null sein. Prüfe den Wert deshalb immer, bevor du auf Eigenschaften zugreifst.
  • suffixes ist eine Zeichenkette und kein Array. Mehrere Endungen trennst du mit mt.suffixes.split(',') auf.