Start · Sprachen · JavaScript · Referenz · SpeechRecognitionErrorEvent.error

SpeechRecognitionErrorEvent.error

Eigenschaft

Schreibgeschützte Eigenschaft, die den Fehlertyp eines <code>SpeechRecognitionErrorEvent</code> als Zeichenkette wie <code>"no-speech"</code> oder <code>"not-allowed"</code> liefert.

seit JavaScript Web Speech API – Chromium (mit webkit-Präfix), Saf Kategorie: webapi

Signatur

SpeechRecognitionErrorEvent.error

Beschreibung

Die Eigenschaft error gehört zum Interface SpeechRecognitionErrorEvent und ist schreibgeschützt. Sie enthält einen festen Fehlercode, der angibt, warum die Spracherkennung fehlgeschlagen ist. Das Ereignis wird über das error-Event eines SpeechRecognition-Objekts ausgelöst, also mit recognition.addEventListener("error", handler) oder recognition.onerror.

Laut Spezifikation sind folgende Werte möglich:

  • "no-speech": Es wurde keine Sprache erkannt, der Nutzer hat also nichts gesagt oder war zu leise.
  • "aborted": Die Eingabe wurde abgebrochen, etwa durch recognition.abort().
  • "audio-capture": Kein Mikrofon verfügbar oder die Audioaufnahme ist fehlgeschlagen.
  • "network": Die Netzwerkverbindung zum Erkennungsdienst ist fehlgeschlagen. Viele Browser erkennen serverseitig.
  • "not-allowed": Der Nutzer oder der Browser hat den Mikrofonzugriff verweigert.
  • "service-not-allowed": Der Browser oder das System lässt den gewünschten Erkennungsdienst nicht zu.
  • "language-not-supported": Die in recognition.lang gesetzte Sprache wird nicht unterstützt.
  • "bad-grammar": Fehler in der Grammatik. Dieser Wert ist veraltet und in neueren Fassungen der Spezifikation entfernt.

In der Praxis wertet man error aus, um dem Nutzer eine passende Meldung zu zeigen, zum Beispiel „Bitte Mikrofon freigeben“. Außerdem lässt sich damit entscheiden, ob ein automatischer Neustart sinnvoll ist: bei "no-speech" ja, bei "not-allowed" nein. Genauere, vom Browser formulierte Details stehen oft zusätzlich in event.message.

Rückgabewert

Typ
string
Beschreibung
Einer der festen Fehlercodes, z. B. "no-speech", "aborted", "audio-capture", "network", "not-allowed", "service-not-allowed" oder "language-not-supported".

Beispiele

Fehlertyp per addEventListener ausgeben

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.lang = "de-DE";

recognition.addEventListener("error", (event) => {
  console.log(`Fehlertyp: ${event.error}`);
  if (event.message) console.log(`Details: ${event.message}`);
});

recognition.start();
Fehlertyp: no-speech

Nutzerfreundliche Fehlermeldungen über onerror

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
const status = document.querySelector("#status");

const meldungen = {
  "no-speech": "Es wurde nichts gesagt. Bitte erneut versuchen.",
  "audio-capture": "Kein Mikrofon gefunden.",
  "not-allowed": "Mikrofonzugriff wurde verweigert.",
  "service-not-allowed": "Der Spracherkennungsdienst ist nicht erlaubt.",
  "network": "Netzwerkfehler – bitte Verbindung prüfen.",
  "language-not-supported": "Diese Sprache wird nicht unterstützt.",
  "aborted": "Erkennung abgebrochen."
};

recognition.onerror = (event) => {
  status.textContent = meldungen[event.error] ?? `Unbekannter Fehler: ${event.error}`;
};

document.querySelector("#mic").addEventListener("click", () => recognition.start());

Automatischer Neustart nur bei behebbaren Fehlern

const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
let neustartErlaubt = true;

const dauerhafteFehler = new Set(["not-allowed", "service-not-allowed", "audio-capture", "language-not-supported"]);

recognition.addEventListener("error", ({ error }) => {
  if (dauerhafteFehler.has(error)) {
    neustartErlaubt = false;
    console.warn(`Erkennung dauerhaft gestoppt (${error})`);
  }
});

// Nach jedem Fehler folgt auch ein "end"-Event
recognition.addEventListener("end", () => {
  if (neustartErlaubt) recognition.start();
});

recognition.start();
Erkennung dauerhaft gestoppt (not-allowed)

// Wichtig · Fallstricke

Browserunterstützung: Chrome und Edge bieten die Web Speech API nur mit Präfix an (webkitSpeechRecognition). Safari unterstützt sie ab Version 14.1. Firefox liefert SpeechRecognition standardmäßig nicht aus. Deshalb immer per Feature-Erkennung prüfen, ob sie vorhanden ist.

  • Die Liste der Fehlercodes ist nicht abgeschlossen: Browser unterscheiden sich im Detail. "bad-grammar" ist veraltet, "language-not-supported" und andere neuere Werte werden nicht überall geliefert. Deshalb immer einen Rückfallzweig für unbekannte Werte vorsehen.
  • Chrome erkennt über einen Server: Ohne Internetverbindung oder bei blockiertem Dienst kommt "network". Auf file://-URLs oder in unsicheren Kontexten (ohne HTTPS) kommt häufig "not-allowed".
  • Nach einem Fehler folgt immer ein end-Event: Einen Neustart deshalb im end-Handler anstoßen, nicht direkt in onerror. Sonst droht ein InvalidStateError.
  • Endlosschleifen vermeiden: Wer bei "not-allowed" automatisch neu startet, erzeugt eine Schleife aus Fehler und Neustart.
  • Datenschutz: Audiodaten werden unter Umständen an Server des Browserherstellers übertragen. Nutzer sollten darüber informiert werden.