有一个按钮,通过按下其中的声音播放没有问题,但问题是,有必要进一步输出后续的声音,但没有按下播放开始按钮。但是浏览器给出Unhandled Promise Rejection:NotAllowedError。有没有人知道一种方法可以绕过这个限制?
svgewumm1#
根据Apple的文档:JavaScript play()和load()方法也是非活动的,直到用户启动回放,除非play()或load()方法被用户操作触发。换句话说,浏览器不会下载音频文件,除非在用户发起的事件(例如单击按钮)期间请求,以最大限度地减少数据使用。但是,一旦用户操作下载了音频,就可以任意调用play()来恢复播放。因此,当用户按下按钮播放第一个声音时,您应该在每个音频元素上调用play(),然后立即调用pause();这将下载所有音频文件,并使它们能够由任何后续JavaScript播放,而无需进一步的用户操作。
play()
load()
pause()
onclick = () => { audios.forEach(audio => { audio.play(); audio.pause(); }) }
1条答案
按热度按时间svgewumm1#
根据Apple的文档:
JavaScript
play()
和load()
方法也是非活动的,直到用户启动回放,除非play()
或load()
方法被用户操作触发。换句话说,浏览器不会下载音频文件,除非在用户发起的事件(例如单击按钮)期间请求,以最大限度地减少数据使用。但是,一旦用户操作下载了音频,就可以任意调用
play()
来恢复播放。因此,当用户按下按钮播放第一个声音时,您应该在每个音频元素上调用
play()
,然后立即调用pause()
;这将下载所有音频文件,并使它们能够由任何后续JavaScript播放,而无需进一步的用户操作。