Signatur
Beschreibung
abort() beendet eine laufende Spracherkennungssitzung sofort. Der Dienst hört nicht mehr auf das Mikrofon, und Audiodaten, die schon aufgenommen, aber noch nicht ausgewertet wurden, werden verworfen. Es wird kein result-Event mehr ausgelöst.
Das ist der wichtigste Unterschied zu stop(): stop() beendet zwar ebenfalls die Aufnahme, versucht aber, aus dem bisher Gesprochenen noch ein Ergebnis zu ermitteln. Nimm abort(), wenn der Nutzer einen Vorgang abbricht (z. B. „Abbrechen“-Button, Escape-Taste, Seitenwechsel) oder wenn ein Ergebnis gar nicht mehr gebraucht wird.
Nach dem Aufruf feuert die Instanz in der Regel ein error-Event mit error === "aborted" und danach ein end-Event. Aufräumarbeiten wie UI-Zurücksetzen gehören deshalb am besten in den end-Handler. Ruft man abort() auf, während gar keine Erkennung läuft, passiert nichts.
Beispiele
Abbrechen-Button für die Spracheingabe
const SpeechRecognitionImpl = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognitionImpl();
recognition.lang = 'de-DE';
const startBtn = document.querySelector('#start');
const cancelBtn = document.querySelector('#cancel');
startBtn.addEventListener('click', () => recognition.start());
// Nutzer bricht ab: Das bisher Gesprochene wird verworfen
cancelBtn.addEventListener('click', () => recognition.abort());
recognition.addEventListener('result', (event) => {
console.log('Erkannt:', event.results[0][0].transcript);
});
recognition.addEventListener('end', () => {
console.log('Erkennung beendet');
});
Abbruch im error-Handler vom echten Fehler unterscheiden
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.onerror = (event) => {
if (event.error === 'aborted') {
console.info('Vom Nutzer oder Code abgebrochen – kein Fehler anzeigen');
return;
}
console.error('Spracherkennung fehlgeschlagen:', event.error);
};
recognition.start();
setTimeout(() => recognition.abort(), 1000);
Zeitlimit und Escape-Taste mit AbortController-ähnlichem Muster
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const listenOnce = (timeoutMs = 5000) => new Promise((resolve, reject) => {
const recognition = new SR();
recognition.lang = 'de-DE';
const cancel = () => recognition.abort();
const onKey = (e) => { if (e.key === 'Escape') cancel(); };
const timer = setTimeout(cancel, timeoutMs);
document.addEventListener('keydown', onKey);
recognition.onresult = (e) => resolve(e.results[0][0].transcript);
recognition.onerror = (e) => reject(new Error(e.error));
recognition.onend = () => {
clearTimeout(timer);
document.removeEventListener('keydown', onKey);
resolve(null); // kein Ergebnis, falls abgebrochen
};
recognition.start();
});
const text = await listenOnce(3000).catch((err) => {
console.warn('Abbruch/Fehler:', err.message);
return null;
});
console.log('Ergebnis:', text);
// Wichtig · Fallstricke
- Unterschied zu
stop():abort()verwirft das bisher Gesprochene,stop()liefert dafür eventuell noch einresult. Wer das letzte Ergebnis noch braucht, mussstop()nehmen. - Nach
abort()kommt meist einerror-Event miterror: "aborted". Dieses sollte man im Fehler-Handler gesondert behandeln, damit dem Nutzer keine falsche Fehlermeldung angezeigt wird. - Die Sitzung endet asynchron. Wer direkt nach
abort()wiederstart()aufruft, bekommt unter Umständen einenInvalidStateError. Neu starten sollte man erst imend-Handler. - Kompatibilität: Chrome und Edge bieten die API nur mit Präfix als
webkitSpeechRecognitionan, Safari ab 14.1. Firefox unterstützt sie standardmäßig nicht. Vorher per Feature-Erkennung prüfen. - In Chrome läuft die Erkennung über einen Server. Das Audio wird also übertragen, und die Seite braucht einen sicheren Kontext (HTTPS) und die Mikrofon-Berechtigung.