Start · Sprachen · JavaScript · Referenz · MimeTypeArray

MimeTypeArray

Schnittstelle

Array-ähnliche Liste von <code>MimeType</code>-Objekten, die über <code>navigator.mimeTypes</code> abrufbar ist und die vom Browser unterstützten Plugin-MIME-Typen beschreibt.

seit JavaScript Veraltet (deprecated). In allen Browsern noch vorh deprecated seit ja Kategorie: webapi

Signatur

interface MimeTypeArray

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

Typ
MimeTypeArray
Beschreibung
Array-ähnliche Liste von 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}`);
}
Anzahl: 2 application/pdf (.pdf) – Portable Document Format text/pdf (.pdf) – Portable Document Format

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');
}
PDF-Plugin: PDF Viewer

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);
["application/pdf", "text/pdf"] true

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/pdf und text/pdf oder eine leere Liste). Er verrät also nichts über wirklich installierte Software. Um den PDF-Betrachter zu erkennen, nutzt man navigator.pdfViewerEnabled (Chrome 94+, Firefox 99+, Safari 16.4+).
  • Kein echtes Array: forEach, map und ähnliche Methoden fehlen. Vorher mit Array.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() und namedItem() null zurück und keinen Fehler. Das Ergebnis also immer prüfen.
  • In Web Workern und in Node.js gibt es diese Schnittstelle nicht.