Signatur
Beschreibung
Die Methode addFromURI() gehört zur Web Speech API. Sie nimmt einen URI entgegen, der auf eine Grammatikdatei zeigt, typischerweise im Format JSGF (JSpeech Grammar Format) oder SRGS, und fügt diese Grammatik als neues SpeechGrammar-Objekt an die Liste an. Diese Liste weist man anschließend der Eigenschaft SpeechRecognition.grammars zu.
Sinnvoll ist das, wenn eine Spracherkennung auf ein festes Vokabular eingeschränkt oder dahin gelenkt werden soll, etwa bei Sprachbefehlen („start“, „stopp“, „weiter“) oder Farb- und Produktnamen. Die Grammatik liegt dann als eigene Datei auf dem Server und muss nicht als String im Code stehen. Für eingebettete Grammatiken gibt es die Schwestermethode addFromString().
Mit dem optionalen Parameter weight legt man fest, wie stark diese Grammatik im Vergleich zu anderen Grammatiken in derselben Liste gewichtet wird. Die Methode gibt nichts zurück. Den Erfolg sieht man an length der Liste bzw. am neuen Eintrag, den man über item() abruft.
Wichtig: In der Praxis werten aktuelle Browser-Engines (vor allem Chrome) Grammatiken bei der Erkennung kaum oder gar nicht aus. Die Methode läuft ohne Fehler durch, beeinflusst das Erkennungsergebnis aber oft nicht messbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $src Pflicht | string | URI der Grammatikdatei, absolut oder relativ, z. B. '/grammars/farben.grxml'. Auch ein data:-URI ist möglich. |
|
| $weight | number | 1.0 | Gewichtung der Grammatik im Verhältnis zu anderen Grammatiken der Liste. Gültig sind Werte von 0.0 bis 1.0. |
Rückgabewert
SpeechGrammar-Objekt an die Liste angehängt.Beispiele
Grammatik von einer URL laden und der Erkennung zuweisen
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const SpeechGrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
if (!SpeechRecognition || !SpeechGrammarList) {
console.warn('Web Speech API wird nicht unterstützt.');
} else {
const grammarList = new SpeechGrammarList();
// Grammatikdatei vom eigenen Server laden
grammarList.addFromURI('/grammars/befehle.grxml', 1);
const recognition = new SpeechRecognition();
recognition.grammars = grammarList;
recognition.lang = 'de-DE';
recognition.addEventListener('result', (event) => {
console.log('Erkannt:', event.results[0][0].transcript);
});
console.log('Grammatiken in der Liste:', grammarList.length);
recognition.start();
}
Mehrere Grammatiken mit unterschiedlicher Gewichtung
const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const list = new GrammarList();
// Hauptvokabular stark, Zusatzvokabular schwächer gewichten
list.addFromURI('https://example.com/grammars/navigation.grxml', 1.0);
list.addFromURI('https://example.com/grammars/smalltalk.grxml', 0.3);
for (let i = 0; i < list.length; i++) {
const g = list.item(i);
console.log(`${i}: ${g.src} (Gewicht ${g.weight})`);
}
JSGF-Grammatik als data:-URI
const GrammarList = window.SpeechGrammarList || window.webkitSpeechGrammarList;
const farben = ['rot', 'grün', 'blau', 'gelb'];
const jsgf = `#JSGF V1.0; grammar farben; public <farbe> = ${farben.join(' | ')} ;`;
const list = new GrammarList();
list.addFromURI(`data:application/x-jsgf,${encodeURIComponent(jsgf)}`, 1);
console.log(list.length);
// Wichtig · Fallstricke
- Experimentell und uneinheitlich unterstützt: In Chrome und Edge gibt es die API nur mit Präfix als
webkitSpeechGrammarList, Firefox unterstützt sie standardmäßig nicht. Vor der Nutzung immer per Feature-Detection prüfen. - Kaum spürbare Wirkung: Chrome ignoriert Grammatiken bei der serverseitigen Erkennung weitgehend. In der aktuellen Spezifikation ist
SpeechGrammarListnur noch als Altlast enthalten und kann künftig entfernt werden. Verlass dich nicht darauf, dass die Erkennung auf das Vokabular eingeschränkt wird, sondern filteretranscriptselbst. - Die Methode liefert keine Rückmeldung, ob die Datei geladen werden konnte. Ein ungültiger URI oder ein CORS-Problem wirft meist keinen Fehler.
- Grammatiken von fremden Domains unterliegen den üblichen CORS- und CSP-Regeln (
connect-src). Lade Grammatikdateien möglichst vom eigenen Ursprung. - Die Spracherkennung selbst braucht einen sicheren Kontext (HTTPS) und die Erlaubnis für das Mikrofon.