Start · Sprachen · JavaScript · Referenz · Plugin

Plugin

Schnittstelle

Das <code>Plugin</code>-Interface beschreibt ein Browser-Plugin mit Name, Dateiname, Beschreibung und den unterstützten MIME-Typen.

seit JavaScript Baseline: alle Browser (veraltet – liefert heute n deprecated seit ja Kategorie: webapi

Signatur

interface Plugin

Beschreibung

Ein Plugin-Objekt steht für ein im Browser registriertes Plugin. Ihr erzeugt es nicht selbst, sondern bekommt es über navigator.plugins (ein PluginArray) oder über MimeType.enabledPlugin. Das Objekt ist schreibgeschützt und bietet folgende Eigenschaften und Methoden:

  • name – Anzeigename des Plugins, z. B. "PDF Viewer".
  • filename – Dateiname der Plugin-Bibliothek; heute meist "internal-pdf-viewer".
  • description – Beschreibungstext, z. B. "Portable Document Format".
  • length – Anzahl der MIME-Typen, die das Plugin verarbeitet.
  • item(index) und namedItem(name) – liefern einzelne MimeType-Objekte. Ein Zugriff per Index (plugin[0]) oder per Name (plugin["application/pdf"]) funktioniert ebenfalls.

Früher diente das Interface dazu, NPAPI-Plugins wie Flash, Java oder Silverlight zu erkennen. Diese Plugins gibt es in keinem aktuellen Browser mehr. Außerdem legt der HTML-Standard die Plugin-Liste inzwischen fest: Kann der Browser PDFs direkt anzeigen, liefert navigator.plugins immer dieselben fünf Einträge ("PDF Viewer", "Chrome PDF Viewer", "Chromium PDF Viewer", "Microsoft Edge PDF Viewer", "WebKit built-in PDF"). Kann er das nicht, ist die Liste leer. Jeder dieser Einträge verweist auf die MIME-Typen application/pdf und text/pdf.

In der Praxis braucht ihr Plugin also fast nur noch für Altcode oder zur Diagnose. Für neuen Code nehmt ihr navigator.pdfViewerEnabled, wenn ihr prüfen wollt, ob der Browser PDFs direkt anzeigt.

Parameter

Name Typ Default Beschreibung
$index Pflicht number Nur für item(index): nullbasierter Index des gewünschten MimeType-Eintrags.
$name Pflicht string Nur für namedItem(name): MIME-Typ als Zeichenkette, z. B. "application/pdf".

Rückgabewert

Typ
Plugin
Beschreibung
Ein schreibgeschütztes Plugin-Objekt aus navigator.plugins. item() und namedItem() geben ein MimeType-Objekt zurück. Gibt es keinen passenden Eintrag, ist das Ergebnis null (bzw. undefined beim direkten Zugriff per Index oder Name).

Beispiele

Alle Plugins mit ihren Eigenschaften auflisten

// Plugin-Objekte bekommt man nur über navigator.plugins
const plugins = Array.from(navigator.plugins);

if (plugins.length === 0) {
  console.log('Keine Plugins gemeldet (kein eingebauter PDF-Viewer).');
}

for (const plugin of plugins) {
  console.log(`${plugin.name} | ${plugin.filename} | ${plugin.description} | MIME-Typen: ${plugin.length}`);
}
PDF Viewer | internal-pdf-viewer | Portable Document Format | MIME-Typen: 2 Chrome PDF Viewer | internal-pdf-viewer | Portable Document Format | MIME-Typen: 2 Chromium PDF Viewer | internal-pdf-viewer | Portable Document Format | MIME-Typen: 2 Microsoft Edge PDF Viewer | internal-pdf-viewer | Portable Document Format | MIME-Typen: 2 WebKit built-in PDF | internal-pdf-viewer | Portable Document Format | MIME-Typen: 2

MIME-Typen eines Plugins mit item() und namedItem() lesen

const plugin = navigator.plugins.namedItem('PDF Viewer');

if (plugin) {
  // Zugriff per Index
  for (let i = 0; i < plugin.length; i++) {
    const mime = plugin.item(i);
    console.log(`${mime.type} (.${mime.suffixes})`);
  }

  // Zugriff per MIME-Typ-Name
  const pdf = plugin.namedItem('application/pdf');
  console.log('Zugehöriges Plugin:', pdf?.enabledPlugin.name);
} else {
  console.log('Kein PDF-Viewer-Plugin vorhanden.');
}
application/pdf (.pdf) text/pdf (.pdf) Zugehöriges Plugin: PDF Viewer

Moderne Alternative: PDF-Unterstützung erkennen

const canShowPdfInline = () => {
  // Bevorzugt: eigene Eigenschaft dafür
  if ('pdfViewerEnabled' in navigator) {
    return navigator.pdfViewerEnabled;
  }
  // Rückfall für ältere Browser über das Plugin-Interface
  return Array.from(navigator.plugins).some(
    (p) => p.namedItem('application/pdf') !== null
  );
};

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

// Wichtig · Fallstricke

Veraltet: Plugin, PluginArray und navigator.plugins gelten als veraltet und bleiben nur für die Kompatibilität mit bestehenden Websites erhalten. Seit Chrome 94, Firefox 99 und Safari 15.x liefern Browser nur noch die festgelegte PDF-Viewer-Liste. Auf Flash, Java und andere Plugins lässt sich damit nicht mehr prüfen.

  • Nutzt die Plugin-Liste nicht zur Browser- oder Funktionserkennung. Prüft stattdessen gezielt, ob eine Funktion vorhanden ist ('xyz' in window), oder nehmt navigator.pdfViewerEnabled.
  • Datenschutz: Früher war die Plugin-Liste ein starkes Merkmal für Browser-Fingerprinting. Deshalb wurde sie vereinheitlicht. Die Einträge sind heute für alle Nutzer gleich und taugen daher nicht mehr zum Fingerprinting.
  • In Firefox und Chrome kann die Liste leer sein, wenn Nutzer den eingebauten PDF-Viewer abgeschaltet haben (z. B. pdfjs.disabled in Firefox).
  • Plugin ist kein echtes Array. Wollt ihr map, filter usw. nutzen, wandelt ihr es vorher mit Array.from() um.
  • Den Konstruktor könnt ihr nicht selbst aufrufen: new Plugin() wirft einen TypeError.