Signatur
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örigePlugin-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/pdfundtext/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
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);
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());
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);
}
}
Direkte Instanziierung schlägt fehl
try {
const mt = new MimeType();
} catch (err) {
console.log(err.name, '-', err.message);
}
// Wichtig · Fallstricke
- Veraltet: Setze
MimeTypenicht in neuem Code ein. Für die PDF-Erkennung istnavigator.pdfViewerEnabledgedacht. Welche Dateitypen der Browser sonst unterstützt, kannst du über dieses Interface nicht zuverlässig herausfinden. Nutze dafür zum BeispielHTMLMediaElement.canPlayType()oderMediaSource.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.pluginsundnavigator.mimeTypesstark 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.mimeTypesleer sein, obwohl ein PDF-Betrachter vorhanden ist.enabledPluginkann dort außerdemnullsein. Prüfe den Wert deshalb immer, bevor du auf Eigenschaften zugreifst. suffixesist eine Zeichenkette und kein Array. Mehrere Endungen trennst du mitmt.suffixes.split(',')auf.