Safari不允许以编程方式播放音频或视频元素,除非在调用堆栈/事件链中源自用户单击/按下。
我正在vue中构建一个播放播客的Web应用程序。我正在构建自定义播放器界面,并且音频元素本身是隐藏的。
这是棘手的部分:当用户单击我的“播放”按钮时,我将更新音频src,然后在nextTick
上通知音频元素播放,因为vue异步更新DOM更改。这意味着我的play()
呼叫来自用户点击产生的链之外。
我想出的解决方案是,我将在处理click事件的方法中调用.play()
(即使没有src,因此将不会播放任何内容)。但是,我只需要第一次进行此操作(一旦完成,我将获得浏览器的“许可”,可以随意播放和暂停)。我可以将其存储为data
对象中的布尔值,但我觉得音频元素上必须可以使用某些内容,例如audioTag.hasUserPermission
?