Signatur
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 durchrecognition.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 inrecognition.langgesetzte 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
"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();
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();
// 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". Auffile://-URLs oder in unsicheren Kontexten (ohne HTTPS) kommt häufig"not-allowed". - Nach einem Fehler folgt immer ein
end-Event: Einen Neustart deshalb imend-Handler anstoßen, nicht direkt inonerror. Sonst droht einInvalidStateError. - 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.