Start · Sprachen · JavaScript · Referenz · Navigator.pdfViewerEnabled

Navigator.pdfViewerEnabled

Eigenschaft

Schreibgeschützter Boolean, der angibt, ob der Browser PDF-Dateien beim Aufrufen direkt im Browser (inline) anzeigen kann.

seit JavaScript Baseline 2023: Chrome 94, Edge 94, Firefox 99, Saf Kategorie: webapi

Signatur

Navigator.pdfViewerEnabled

Beschreibung

Die schreibgeschützte Eigenschaft navigator.pdfViewerEnabled liefert true, wenn der Browser beim Aufruf eines PDF-Dokuments einen eingebauten PDF-Betrachter verwendet. Sie liefert false, wenn kein Betrachter vorhanden ist oder der Nutzer ihn deaktiviert hat. In diesem Fall wird die Datei heruntergeladen oder an eine externe Anwendung übergeben.

Die Eigenschaft ist der standardisierte Nachfolger der veralteten Prüfung über navigator.plugins und navigator.mimeTypes. Mit ihr kann eine Webanwendung entscheiden, ob sie ein PDF z. B. in einem <iframe> oder <embed> anzeigt oder lieber einen Download-Link bzw. einen JavaScript-basierten Betrachter wie PDF.js anbietet.

Der Wert sagt nur aus, ob der Browser beim Navigieren zu einer PDF-Ressource eine Inline-Anzeige anbietet. Ob ein bestimmtes PDF fehlerfrei dargestellt wird, etwa bei Formularen, Verschlüsselung oder besonderen Schriften, lässt sich daraus nicht ablesen.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn PDFs inline angezeigt werden können, sonst false. In älteren Browsern ist die Eigenschaft nicht vorhanden und liefert undefined.

Beispiele

Einfache Abfrage

if (navigator.pdfViewerEnabled) {
  console.log('PDFs werden direkt im Browser angezeigt.');
} else {
  console.log('PDFs werden heruntergeladen oder extern geöffnet.');
}
PDFs werden direkt im Browser angezeigt.

PDF einbetten oder Download-Link anbieten

const showPdf = (container, url) => {
  if (navigator.pdfViewerEnabled) {
    const frame = document.createElement('iframe');
    frame.src = url;
    frame.title = 'PDF-Vorschau';
    frame.width = '100%';
    frame.height = '600';
    container.replaceChildren(frame);
  } else {
    const link = document.createElement('a');
    link.href = url;
    link.download = '';
    link.textContent = 'PDF herunterladen';
    container.replaceChildren(link);
  }
};

showPdf(document.querySelector('#preview'), '/docs/rechnung-2024.pdf');

Feature-Erkennung mit Rückfall für ältere Browser

const canShowPdfInline = () => {
  if ('pdfViewerEnabled' in navigator) {
    return navigator.pdfViewerEnabled;
  }
  // Veralteter Rückfall über die MIME-Typ-Liste
  return Boolean(navigator.mimeTypes?.namedItem?.('application/pdf'));
};

console.log(`Inline-PDF möglich: ${canShowPdfInline()}`);
Inline-PDF möglich: true

// Wichtig · Fallstricke

  • Browserunterstützung: verfügbar ab Chrome/Edge 94, Firefox 99 und Safari 16.4. Ältere Browser liefern undefined. Prüfe daher bei Bedarf mit 'pdfViewerEnabled' in navigator.
  • Auf vielen Mobilgeräten, z. B. Chrome unter Android, ist der Wert oft false, weil PDFs dort an eine externe App übergeben werden.
  • Der Nutzer kann die Inline-Anzeige in den Browsereinstellungen abschalten, z. B. über „PDFs herunterladen“ in Chrome. Der Wert kann also auch auf dem Desktop false sein.
  • true garantiert nicht, dass ein PDF in einem <iframe> angezeigt wird. Header wie X-Frame-Options, eine CSP (frame-src, object-src) oder Content-Disposition: attachment können die Anzeige trotzdem verhindern.
  • Die Eigenschaft ersetzt die Prüfung über navigator.plugins und navigator.mimeTypes. Diese Listen sind inzwischen fest vorgegeben und zum Schutz vor Fingerprinting eingeschränkt.