Start · Sprachen · JavaScript · Referenz · PluginArray

PluginArray

Schnittstelle

Array-ähnliche, schreibgeschützte Liste von <code>Plugin</code>-Objekten, die über <code>navigator.plugins</code> abrufbar ist.

seit JavaScript Baseline: alle Browser (veraltet, Inhalt seit HTML deprecated seit ja Kategorie: webapi

Signatur

interface PluginArray

Beschreibung

Das Interface PluginArray steht für eine schreibgeschützte, array-ähnliche Sammlung von Plugin-Objekten. Jedes Objekt beschreibt ein im Browser installiertes Plugin mit Name, Dateiname, Beschreibung und den unterstützten MIME-Typen. Eine Instanz bekommt man nur über navigator.plugins. Man kann sie nicht selbst erzeugen, denn new PluginArray() wirft einen TypeError.

Die Schnittstelle bietet folgende Mitglieder:

  • length: Anzahl der Plugins in der Liste.
  • item(index): gibt das Plugin an der Position index zurück, ebenso plugins[index].
  • namedItem(name): gibt das Plugin mit dem Namen name zurück, ebenso plugins[name].
  • refresh(): war früher zum Neuladen der Plugin-Liste gedacht und bewirkt heute nichts mehr.

Früher prüfte man mit PluginArray, ob zum Beispiel Flash, Java oder QuickTime installiert war. NPAPI-Plugins werden aber von keinem aktuellen Browser mehr unterstützt. Laut HTML-Standard enthält die Liste heute entweder nichts oder genau fünf feste PDF-Einträge: „PDF Viewer“, „Chrome PDF Viewer“, „Chromium PDF Viewer“, „Microsoft Edge PDF Viewer“ und „WebKit built-in PDF“. Welche Variante man bekommt, hängt davon ab, ob der Browser PDFs direkt anzeigt. So verrät die Liste weniger über den Nutzer, und es bleibt abwärtskompatibel.

In neuem Code sollte man PluginArray nicht mehr einsetzen. Ob der Browser PDFs anzeigen kann, verrät navigator.pdfViewerEnabled direkter.

Parameter

Name Typ Default Beschreibung
$index Pflicht number Nur bei item(index): nullbasierte Position des gewünschten Plugins. Liegt der Index außerhalb der Liste, kommt null zurück.
$name Pflicht string Nur bei namedItem(name): genauer Name des Plugins, z. B. "PDF Viewer". Groß- und Kleinschreibung zählt.

Rückgabewert

Typ
Plugin | null
Beschreibung
item() und namedItem() geben ein Plugin-Objekt zurück oder null, wenn es keinen passenden Eintrag gibt. length ist eine number, refresh() gibt undefined zurück.

Beispiele

Instanz abrufen (kein Konstruktor verfügbar)

// Eine PluginArray-Instanz gibt es nur über navigator.plugins
const plugins = navigator.plugins;
console.log(plugins instanceof PluginArray);
console.log(plugins.length);

try {
  new PluginArray();
} catch (err) {
  console.log(err.name);
}
true 5 TypeError

Alle Plugins auflisten

// PluginArray lässt sich mit for...of durchlaufen
for (const plugin of navigator.plugins) {
  console.log(`${plugin.name} – ${plugin.filename}`);
}

// Oder in ein echtes Array umwandeln
const namen = Array.from(navigator.plugins, (p) => p.name);
console.log(namen);
PDF Viewer – internal-pdf-viewer Chrome PDF Viewer – internal-pdf-viewer ... ["PDF Viewer", "Chrome PDF Viewer", "Chromium PDF Viewer", "Microsoft Edge PDF Viewer", "WebKit built-in PDF"]

Zugriff über Index und Name

const { plugins } = navigator;

const erstes = plugins.item(0);      // gleichwertig: plugins[0]
const pdf = plugins.namedItem('PDF Viewer'); // gleichwertig: plugins['PDF Viewer']

console.log(erstes?.name ?? 'keine Plugins');
console.log(pdf ? 'PDF-Viewer vorhanden' : 'kein PDF-Viewer');
console.log(plugins.item(99));
PDF Viewer PDF-Viewer vorhanden null

PDF-Unterstützung zeitgemäß prüfen

// Bevorzugt: pdfViewerEnabled, ältere Browser über navigator.plugins
const kannPdfAnzeigen = () =>
  'pdfViewerEnabled' in navigator
    ? navigator.pdfViewerEnabled
    : navigator.plugins.namedItem('PDF Viewer') !== null;

const link = document.createElement('a');
link.href = '/docs/handbuch.pdf';
link.textContent = kannPdfAnzeigen() ? 'PDF im Browser öffnen' : 'PDF herunterladen';
if (!kannPdfAnzeigen()) link.download = '';
document.body.append(link);

// Wichtig · Fallstricke

  • Veraltet: PluginArray und navigator.plugins gibt es nur noch aus Gründen der Abwärtskompatibilität. Aktuelle Browser liefern eine feste Liste mit fünf PDF-Einträgen oder eine leere Liste. Über echte Erweiterungen oder Plugins sagt das nichts aus.
  • Kein echtes Array: Methoden wie map oder filter fehlen. Vorher mit Array.from() oder dem Spread-Operator umwandeln.
  • Fingerprinting: Früher war die Plugin-Liste ein beliebtes Merkmal, um Nutzer wiederzuerkennen. Deshalb wurde sie vereinheitlicht. Firefox hat die Liste zeitweise absichtlich leer oder gekürzt ausgegeben.
  • Flash, Java und andere NPAPI-Plugins lassen sich damit nicht mehr erkennen, weil diese Technik aus allen Browsern entfernt wurde.
  • refresh() bewirkt nichts mehr.
  • Für Feature-Erkennung besser navigator.pdfViewerEnabled oder direkte API-Prüfungen verwenden, zum Beispiel 'serviceWorker' in navigator.