Start · Sprachen · JavaScript · Referenz · BarcodeDetector.getSupportedFormats()

BarcodeDetector.getSupportedFormats()

Methode

Statische Methode, die ein <code>Promise</code> mit einem Array aller Barcode-Formate zurückgibt, die der <code>BarcodeDetector</code> auf dem aktuellen Gerät erkennen kann.

seit JavaScript Barcode Detection API – Chromium (Chrome/Edge Andr Kategorie: webapi

Signatur

BarcodeDetector.getSupportedFormats()

Beschreibung

BarcodeDetector.getSupportedFormats() ist eine statische Methode der Barcode Detection API. Sie wird direkt auf der Klasse aufgerufen, nicht auf einer Instanz, und liefert ein Promise. Dieses wird mit einem Array von Zeichenketten erfüllt, etwa "qr_code", "ean_13" oder "code_128". Das Array enthält die Formate, die die zugrunde liegende Plattform (Betriebssystem bzw. Hardware) tatsächlich erkennen kann.

Die Methode ist nötig, weil welche Formate unterstützt werden, vom System und nicht vom Browser allein abhängt. Chrome unter Android nutzt z. B. Google Play Services, unter macOS das Vision-Framework. Die unterstützten Formate unterscheiden sich deshalb je nach Gerät. Frag die Formate ab, bevor du einen Detektor mit new BarcodeDetector({ formats }) erzeugst. Übergibst du dort ein nicht unterstütztes Format, wird zwar keine Ausnahme ausgelöst, es wird aber nie ein Treffer gefunden. Ein leeres Array bedeutet: Die API ist vorhanden, aber das System kann gerade keine Barcodes erkennen.

Mögliche Werte sind: aztec, code_128, code_39, code_93, codabar, data_matrix, ean_13, ean_8, itf, pdf417, qr_code, upc_a, upc_e sowie unknown.

Rückgabewert

Typ
Promise<string[]>
Beschreibung
Ein Promise, das mit einem Array von Format-Zeichenketten erfüllt wird (z. B. ["qr_code", "ean_13"]). Das Array kann leer sein, wenn das System keine Barcode-Erkennung bereitstellt.

Beispiele

Unterstützte Formate auflisten

if ('BarcodeDetector' in globalThis) {
  const formats = await BarcodeDetector.getSupportedFormats();
  console.log('Unterstützte Formate:', formats);
} else {
  console.log('Barcode Detection API nicht verfügbar');
}
Unterstützte Formate: ['aztec', 'code_128', 'code_39', 'data_matrix', 'ean_13', 'ean_8', 'qr_code', 'upc_a', 'upc_e']

Detektor nur mit gewünschten und verfügbaren Formaten erzeugen

const createDetector = async (wanted = ['qr_code', 'ean_13']) => {
  if (!('BarcodeDetector' in globalThis)) return null;
  const supported = await BarcodeDetector.getSupportedFormats();
  const formats = wanted.filter((f) => supported.includes(f));
  if (formats.length === 0) {
    console.warn('Keines der gewünschten Formate wird unterstützt.');
    return null;
  }
  return new BarcodeDetector({ formats });
};

const detector = await createDetector();
console.log(detector ? 'Detektor bereit' : 'Fallback nötig');
Detektor bereit

QR-Code aus einem Bild lesen, mit Fallback

const scanImage = async (imgElement) => {
  const supported = 'BarcodeDetector' in globalThis
    ? await BarcodeDetector.getSupportedFormats()
    : [];

  if (!supported.includes('qr_code')) {
    // Hier z. B. eine JS-Bibliothek wie zxing-js als Fallback laden
    throw new Error('Native QR-Erkennung nicht verfügbar');
  }

  const detector = new BarcodeDetector({ formats: ['qr_code'] });
  const codes = await detector.detect(imgElement);
  return codes.map((c) => c.rawValue);
};

const img = document.querySelector('#ticket');
scanImage(img)
  .then((values) => console.log('Gefunden:', values))
  .catch((err) => console.error(err.message));
Gefunden: ['https://example.com/ticket/4711']

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die API ist experimentell und nur in Chromium-Browsern verfügbar, vor allem Chrome/Edge unter Android, ChromeOS und macOS. Unter Windows und Linux fehlt sie meist. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher mit 'BarcodeDetector' in globalThis, ob sie existiert.
  • Statisch aufrufen: detector.getSupportedFormats() auf einer Instanz schlägt fehl (TypeError). Richtig ist BarcodeDetector.getSupportedFormats().
  • Leeres Array möglich: Auch wenn die Klasse vorhanden ist, kann das Ergebnis [] sein, z. B. wenn unter Android die Play Services fehlen. Plane dafür eine Ersatzlösung ein, etwa eine WebAssembly- oder JS-Bibliothek.
  • Sicherer Kontext: Die API steht nur über HTTPS bzw. localhost zur Verfügung.
  • Unbekannte Formate im Konstruktor lösen einen TypeError aus. Gültige, aber nicht unterstützte Formate werden dagegen stillschweigend nie erkannt. Gleiche die gewünschten Formate deshalb immer mit dieser Methode ab.
  • Ergebnisse aus detect() sind Eingaben von außen: rawValue nie ungeprüft per innerHTML einfügen oder als URL öffnen, sonst drohen XSS oder Phishing.