Signatur
Beschreibung
Die Eigenschaft AudioSession.state gehört zur Audio Session API. Über das Objekt navigator.audioSession erfährt eine Webseite, ob ihre Audio-Ausgabe gerade vom Betriebssystem zugelassen wird. Das ist vor allem auf Mobilgeräten wichtig: Dort können eingehende Anrufe, Wecker oder andere Apps die Wiedergabe einer Seite jederzeit unterbrechen.
Mögliche Werte:
"inactive"– Die Seite gibt gerade kein Audio aus bzw. nimmt keins auf. Die Session belegt keine Audio-Ressourcen."active"– Die Seite spielt Audio ab oder nimmt es auf (z. B. über<audio>,<video>oder die Web Audio API)."interrupted"– Das System hat die Session unterbrochen, z. B. wegen eines Telefonanrufs. Die Wiedergabe ist pausiert, bis die Unterbrechung endet.
Die Eigenschaft ist schreibgeschützt: Der Zustand ergibt sich aus der tatsächlichen Mediennutzung und aus Eingriffen des Systems. Auf Änderungen reagiert man mit dem Ereignis statechange (addEventListener("statechange", …) oder onstatechange). So kann man die Oberfläche anpassen, etwa ein Pause-Symbol anzeigen oder nach einer Unterbrechung einen Button zum Fortsetzen einblenden.
Wie sich eine Seite gegenüber anderen Audioquellen verhält (mischen, ausblenden, exklusiv abspielen), legt man mit der beschreibbaren Eigenschaft AudioSession.type fest.
Rückgabewert
AudioSessionState, der den aktuellen Zustand der Audio-Session beschreibt.Beispiele
Aktuellen Zustand mit Funktionsprüfung abfragen
if ('audioSession' in navigator) {
console.log('Audio-Session-Zustand:', navigator.audioSession.state);
} else {
console.log('Audio Session API wird nicht unterstützt');
}
Oberfläche bei Unterbrechung anpassen (statechange)
const player = document.querySelector('audio');
const hinweis = document.querySelector('#hinweis');
const aktualisiereUI = () => {
const { state } = navigator.audioSession;
switch (state) {
case 'active':
hinweis.textContent = 'Wiedergabe läuft';
break;
case 'interrupted':
hinweis.textContent = 'Wiedergabe durch das System unterbrochen';
break;
default:
hinweis.textContent = 'Kein Audio aktiv';
}
};
if ('audioSession' in navigator) {
navigator.audioSession.addEventListener('statechange', aktualisiereUI);
aktualisiereUI();
}
Nach Unterbrechung Fortsetzen anbieten (onstatechange)
const player = document.querySelector('audio');
const weiterBtn = document.querySelector('#weiter');
let warUnterbrochen = false;
navigator.audioSession.type = 'playback';
navigator.audioSession.onstatechange = () => {
const { state } = navigator.audioSession;
if (state === 'interrupted') {
warUnterbrochen = true;
weiterBtn.hidden = false;
} else if (state === 'inactive' && warUnterbrochen) {
// Unterbrechung vorbei – Nutzer entscheidet über das Fortsetzen
weiterBtn.hidden = false;
} else if (state === 'active') {
warUnterbrochen = false;
weiterBtn.hidden = true;
}
};
weiterBtn.addEventListener('click', async () => {
await player.play(); // Nutzergeste erlaubt die erneute Wiedergabe
});
// Wichtig · Fallstricke
- Kompatibilität: Die Audio Session API ist ein experimenteller W3C-Entwurf.
navigator.audioSessiongibt es bisher nur in WebKit/Safari (ab 16.4, zunächst mittype). Die Unterstützung fürstateundstatechangekann je nach Version fehlen. Prüfe deshalb immer mit'audioSession' in navigatorund'state' in navigator.audioSession. Chromium und Firefox unterstützen die API derzeit nicht. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wie
navigator.audioSession.state = 'active'wird still ignoriert bzw. löst im Strict Mode einenTypeErroraus. - Nach dem Ende einer Unterbrechung geht der Zustand in der Regel auf
"inactive"zurück. Die Wiedergabe startet nicht automatisch neu. Wegen der Autoplay-Regeln braucht ein erneutesplay()oft eine Nutzergeste. - Der Zustand gilt für die gesamte Seite bzw. das Dokument, nicht für einzelne Medienelemente.