如何绕过音频元素的iOS权限策略.play()方法?

xmjla07d  于 2023-06-25  发布在  iOS
关注(0)|答案(1)|浏览(95)

有一个按钮,通过按下其中的声音播放没有问题,但问题是,有必要进一步输出后续的声音,但没有按下播放开始按钮。但是浏览器给出Unhandled Promise Rejection:NotAllowedError。
有没有人知道一种方法可以绕过这个限制?

svgewumm

svgewumm1#

根据Apple的文档:
JavaScript play()load()方法也是非活动的,直到用户启动回放,除非play()load()方法被用户操作触发。
换句话说,浏览器不会下载音频文件,除非在用户发起的事件(例如单击按钮)期间请求,以最大限度地减少数据使用。但是,一旦用户操作下载了音频,就可以任意调用play()来恢复播放。
因此,当用户按下按钮播放第一个声音时,您应该在每个音频元素上调用play(),然后立即调用pause();这将下载所有音频文件,并使它们能够由任何后续JavaScript播放,而无需进一步的用户操作。

onclick = () => {
  audios.forEach(audio => { audio.play(); audio.pause(); })
}

相关问题