Signatur
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 dasPluginan der Positionindexzurück, ebensoplugins[index].namedItem(name): gibt dasPluginmit dem Namennamezurück, ebensoplugins[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
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);
}
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);
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-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:
PluginArrayundnavigator.pluginsgibt 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
mapoderfilterfehlen. Vorher mitArray.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.pdfViewerEnabledoder direkte API-Prüfungen verwenden, zum Beispiel'serviceWorker' in navigator.