Signatur
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
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}`);
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.');
}
// Wichtig · Fallstricke
- Veraltet: Die Eigenschaft bleibt nur aus Kompatibilitätsgründen erhalten. Für neuen Code nimmt man
navigator.pdfViewerEnabled,HTMLMediaElement.canPlayType()oderMediaSource.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()oderfilter()fehlen. Vorher mitArray.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.