diff --git a/__TEST__/hyperaudio-lite.test.js b/__TEST__/hyperaudio-lite.test.js index 5b9ff0d..67db9a8 100644 --- a/__TEST__/hyperaudio-lite.test.js +++ b/__TEST__/hyperaudio-lite.test.js @@ -746,6 +746,24 @@ test("registerPlayer() adds a custom player type (#253)", () => { delete hyperaudioPlayerOptions.fake; }); +test("NativePlayer stays paused when browser playback is rejected (#268)", async () => { + const inst = new HyperaudioLite({ + transcript: "hypertranscript", + player: "hyperplayer", + }); + const rejectedPlay = Promise.reject(new DOMException("Autoplay blocked", "NotAllowedError")); + rejectedPlay.catch(() => {}); + const playSpy = jest.spyOn(inst.player, "play").mockReturnValue(rejectedPlay); + + inst.myPlayer.paused = true; + inst.myPlayer.play(); + await Promise.resolve(); + + expect(inst.myPlayer.paused).toBe(true); + + playSpy.mockRestore(); + inst.destroy(); +}); diff --git a/js/hyperaudio-lite.js b/js/hyperaudio-lite.js index c86b2a3..5e542bd 100644 --- a/js/hyperaudio-lite.js +++ b/js/hyperaudio-lite.js @@ -62,8 +62,12 @@ class NativePlayer extends BasePlayer { } play() { - this.player.play(); - this.paused = false; + const playPromise = this.player.play(); + if (playPromise && typeof playPromise.catch === 'function') { + playPromise.catch(() => { + this.paused = true; + }); + } } pause() { diff --git a/js/hyperaudio-lite.mjs b/js/hyperaudio-lite.mjs index 82f9f7c..c083ca0 100644 --- a/js/hyperaudio-lite.mjs +++ b/js/hyperaudio-lite.mjs @@ -62,8 +62,12 @@ class NativePlayer extends BasePlayer { } play() { - this.player.play(); - this.paused = false; + const playPromise = this.player.play(); + if (playPromise && typeof playPromise.catch === 'function') { + playPromise.catch(() => { + this.paused = true; + }); + } } pause() {