it-swarm.com.de

Das Abspielen einer Audiodatei gibt "Uncaught (in Promise)" zurück, funktioniert jedoch in der Konsole

Ich versuche, Audiodateien abzuspielen (ich habe viele ausprobiert). Alle von ihnen sind MP3s. Ich habe Folgendes sowohl auf MAMP localhost als auch durch einfaches Ausführen im Browser getestet.

Ich benutze folgendes Javascript:

var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(testSound.play.bind(testSound),100)

Dies gibt den Fehler zurück:

Uncaught (in promise)

Der Versuch, es zu fangen:

var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(playSound,100)
function playSound () {
    testSound.play().then(response => {

    }).catch(e => {
        console.log(e);
    })
}

gibt nichts zurück ("")

Aber wenn ich mich jetzt an die Konsole wende und einfach tippe:

testSound.play()

Der Sound spielt so, wie er soll.

Auch wenn ich die dritte Zeile des ersten Codeausschnitts wie folgt kommentiere:

//setTimeout(testSound.play.bind(testSound),100)

Bearbeiten:

Selbst wenn die Leute nicht wissen, was die Lösung ist, wäre ich immer noch interessiert, ob sie den Fehler reproduzieren können.

Edit 2:

Übrigens, das Problem besteht in Firefox oder Safari nicht weiter.

10

Wenn Sie die vollständige Fehlermeldung lesen, die der Ausnahme zugeordnet ist, erhalten Sie eine bessere Erklärung:

❌ Nicht abgefangen (in Versprechen) DOMException: play () ist fehlgeschlagen, weil der Benutzer nicht zuerst mit dem Dokument interagiert hat. https://goo.gl/xX8pDD

Googles Artikel " Änderungen der Autoplay-Richtlinie " (in der obigen Nachricht verlinkt) erläutert die Situation im Detail.

Die Kurzversion lautet: Wenn Sie Audio oder Video abspielen möchten, müssen Sie warten, bis der Benutzer auf etwas auf der Seite geklickt hat.

20
duskwuff