Signatur
Beschreibung
MimeTypeArray ist das Objekt, das navigator.mimeTypes zurückgibt. Es enthält MimeType-Instanzen. Jede davon beschreibt einen MIME-Typ, den ein Browser-Plugin verarbeiten kann, zusammen mit Dateiendungen (suffixes), einer Beschreibung (description) und dem zugehörigen Plugin (enabledPlugin).
Die Schnittstelle ist array-ähnlich, aber kein echtes Array. Sie bietet die Eigenschaft length, einen Indexzugriff (mimeTypes[0]), die Methode item(index) sowie namedItem(name) für den Zugriff über den Typnamen (auch als mimeTypes["application/pdf"]). Methoden wie map() oder filter() gibt es nicht. Dafür wandelt man die Liste vorher mit Array.from() um.
Klassische NPAPI-Plugins wie Flash oder Java werden heute nicht mehr unterstützt. Deshalb schreibt der HTML-Standard eine feste Liste vor: Hat der Browser einen eingebauten PDF-Betrachter, enthält die Liste genau application/pdf und text/pdf, andernfalls ist sie leer. Neuer Code sollte die Schnittstelle nicht mehr nutzen. Um den PDF-Betrachter zu erkennen, fragt man navigator.pdfViewerEnabled ab.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index Pflicht | number | Parameter von item(index): nullbasierte Position des gewünschten MimeType. Liegt der Index außerhalb des Bereichs, ist das Ergebnis null. |
|
| $name Pflicht | string | Parameter von namedItem(name): MIME-Typ als Zeichenkette, z. B. "application/pdf". Wird er nicht gefunden, ist das Ergebnis null. |
Rückgabewert
MimeType-Objekten. item() und namedItem() geben jeweils ein MimeType oder null zurück, length gibt die Anzahl als number zurück.Beispiele
Alle MIME-Typen auflisten
const mimeTypes = navigator.mimeTypes; // MimeTypeArray
console.log(`Anzahl: ${mimeTypes.length}`);
for (let i = 0; i < mimeTypes.length; i++) {
const mt = mimeTypes.item(i);
console.log(`${mt.type} (.${mt.suffixes}) – ${mt.description}`);
}
Gezielt nach einem Typ fragen mit namedItem()
const pdf = navigator.mimeTypes.namedItem('application/pdf');
// gleichwertig: navigator.mimeTypes['application/pdf']
if (pdf) {
console.log('PDF-Plugin:', pdf.enabledPlugin?.name);
} else {
console.log('Kein PDF-Betrachter verfügbar');
}
In echtes Array umwandeln und filtern
const types = Array.from(navigator.mimeTypes, (mt) => mt.type);
const hasPdf = types.some((t) => t.endsWith('/pdf'));
console.log(types, hasPdf);
Moderne Alternative: pdfViewerEnabled mit Rückfallebene
const canShowPdfInline = () =>
'pdfViewerEnabled' in navigator
? navigator.pdfViewerEnabled
: Boolean(navigator.mimeTypes?.namedItem('application/pdf'));
const link = document.createElement('a');
link.href = '/docs/handbuch.pdf';
link.textContent = canShowPdfInline() ? 'PDF im Browser öffnen' : 'PDF herunterladen';
if (!canShowPdfInline()) link.download = '';
document.body.append(link);
// Wichtig · Fallstricke
- Veraltet: Der Inhalt ist in allen aktuellen Browsern fest vorgegeben (nur
application/pdfundtext/pdfoder eine leere Liste). Er verrät also nichts über wirklich installierte Software. Um den PDF-Betrachter zu erkennen, nutzt mannavigator.pdfViewerEnabled(Chrome 94+, Firefox 99+, Safari 16.4+). - Kein echtes Array:
forEach,mapund ähnliche Methoden fehlen. Vorher mitArray.from()oder dem Spread-Operator umwandeln. - Datenschutz: Früher war die Plugin- und MIME-Liste ein beliebtes Merkmal für Browser-Fingerprinting. Die feste Liste soll genau das verhindern. Auf ältere Werte sollte man sich nicht verlassen.
- Fehlt ein Eintrag, geben
item()undnamedItem()nullzurück und keinen Fehler. Das Ergebnis also immer prüfen. - In Web Workern und in Node.js gibt es diese Schnittstelle nicht.