Start · Sprachen · JavaScript · Referenz · Navigator.mimeTypes

Navigator.mimeTypes

Eigenschaft

Schreibgeschützte, veraltete Eigenschaft, die ein <code>MimeTypeArray</code> mit den MIME-Typen liefert, die der Browser über Plugins anzeigen kann. Heute enthält es nur noch PDF-Typen oder ist leer.

seit JavaScript Veraltet (deprecated). Alle Browser; seit ca. 2022 Kategorie: webapi

Signatur

get Navigator.mimeTypes

Beschreibung

navigator.mimeTypes gibt ein MimeTypeArray zurück: eine array-ähnliche, schreibgeschützte Sammlung von MimeType-Objekten. Jedes Objekt hat die Eigenschaften type (z. B. "application/pdf"), description, suffixes (Dateiendungen) und enabledPlugin (das zugehörige Plugin-Objekt). Man greift über einen Index (mimeTypes[0]), über item(index) oder über den MIME-Typ als Namen (mimeTypes["application/pdf"] bzw. namedItem()) auf die Einträge zu.

Früher war die Eigenschaft nützlich, um NPAPI-Plugins wie Flash, Java oder QuickTime zu erkennen. Nachdem diese Plugins entfernt wurden, schreibt der HTML-Standard eine fest vorgegebene Liste vor. Kann der Browser PDFs direkt anzeigen, enthält das Array genau zwei Einträge: "application/pdf" und "text/pdf". Andernfalls ist es leer (length === 0). So lässt sich über die Liste kein Fingerprinting mehr betreiben.

Für neuen Code sollte man navigator.mimeTypes nicht mehr verwenden. Ob PDFs direkt angezeigt werden, erfährt man einfacher und eindeutiger über navigator.pdfViewerEnabled. Ob ein Medienformat abspielbar ist, prüft man mit HTMLMediaElement.canPlayType() oder MediaSource.isTypeSupported(). Die Eigenschaft ist heute vor allem wichtig, wenn man alten Code versteht oder pflegt.

Rückgabewert

Typ
MimeTypeArray
Beschreibung
Array-ähnliches, schreibgeschütztes Objekt mit MimeType-Einträgen. Kann der Browser PDFs anzeigen, stehen darin application/pdf und text/pdf, sonst ist es leer. Es besitzt length, item(index) und namedItem(name).

Beispiele

Alle gemeldeten MIME-Typen auflisten

// MimeTypeArray ist kein echtes Array – deshalb Array.from()
const types = Array.from(navigator.mimeTypes, (mt) => ({
  type: mt.type,
  description: mt.description,
  suffixes: mt.suffixes,
  plugin: mt.enabledPlugin?.name ?? null
}));

console.table(types);
console.log(`Anzahl: ${navigator.mimeTypes.length}`);
Anzahl: 2 (Tabelle: application/pdf | Portable Document Format | pdf | PDF Viewer text/pdf | Portable Document Format | pdf | PDF Viewer)

PDF-Unterstützung prüfen – modern mit Rückfallebene

const canShowPdfInline = () => {
  // Moderner, empfohlener Weg
  if ('pdfViewerEnabled' in navigator) {
    return navigator.pdfViewerEnabled;
  }
  // Rückfallebene für ältere Browser
  return Boolean(navigator.mimeTypes?.namedItem('application/pdf'));
};

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

Zugriff über Index und Namen

const { mimeTypes } = navigator;

if (mimeTypes.length > 0) {
  console.log(mimeTypes[0].type);                      // per Index
  console.log(mimeTypes.item(1)?.type);                 // per item()
  console.log(mimeTypes['application/pdf']?.suffixes);  // per Name
} else {
  console.log('Kein integrierter PDF-Viewer verfügbar.');
}
application/pdf text/pdf pdf

// Wichtig · Fallstricke

  • Veraltet: Die Eigenschaft bleibt nur aus Kompatibilitätsgründen erhalten. Für neuen Code nimmt man navigator.pdfViewerEnabled, HTMLMediaElement.canPlayType() oder MediaSource.isTypeSupported().
  • Keine echte Formaterkennung: Die Liste sagt nichts darüber aus, welche Bild-, Video- oder Audioformate der Browser beherrscht. Sie enthält höchstens die zwei PDF-Einträge.
  • Kein echtes Array: Methoden wie map() oder filter() fehlen. Vorher mit Array.from() oder dem Spread-Operator umwandeln.
  • Leeres Ergebnis: Hat der Nutzer den integrierten PDF-Viewer abgeschaltet (z. B. in Chrome unter „PDFs herunterladen“), ist die Liste leer. Das gilt auch für manche mobilen Browser.
  • Browserunterschiede: Ältere Browser, etwa Chrome vor Version 94 oder Firefox vor Version 99, liefern teils andere oder längere Listen. Code, der früher Flash oder Java über diese Liste erkannt hat, findet heute nichts mehr.
  • Nur im Browser: In Web Workern gibt es die Eigenschaft nicht, in Node.js ebenfalls nicht.