【发布时间】:2018-10-16 03:14:38
【问题描述】:
我在最新版本的 Chrome 桌面上收到了这个 JavaScript 警告,现在它会阻止在没有用户交互的情况下自动播放声音:http://bgr.com/2018/03/22/google-chrome-autoplay-videos-sound-block/
所以我在控制台日志中收到此错误/警告:“AudioContext 不允许启动。它必须在页面上的用户手势后恢复(或创建)”
我有什么方法可以在用户交互时恢复声音或 SoundJS 的音频上下文,例如页面上的点击或键盘事件?
我的设置是我使用 preloadJS 来加载我的 MP3,如下所示:
queue.loadManifest([
{id: 'sndScore', src: 'sndScore.mp3'}
]);
然后我播放这样的声音:
createjs.Sound.play("sndScore");
我尝试放置一个标志 var unitInteracted= false;然后,如果用户与页面交互,我将其设置为 true,并修改我的声音播放代码,以确保在我尝试播放声音之前已经与页面进行了交互:
if (unitInteracted) {
createjs.Sound.play("sndScore");
}
...但由于某种原因,我仍然收到上述错误/警告,并且页面最终仍然被静音。一旦 Chrome 说:“AudioContext 不允许启动。它必须在页面上的用户手势之后恢复(或创建)”,有什么方法可以取消静音?
谢谢!
【问题讨论】:
-
我不知道SoundJS,也不知道他们何时创建AudioContext,但是您遇到的错误告诉您在用户手势本身中初始化上下文(即在事件处理程序中同步,或之后不到 60 毫秒的时间)。似乎它与媒体元素不同,媒体元素只需要页面曾经收到过用户手势。因此,您的标志方式将不起作用,并且取决于 SoundJS 确实创建其上下文的方式和时间,它可能很难,或者像初始启动屏幕一样简单,您将在其中绑定触发
createjs.sound.play(silence)的点击事件
标签: javascript google-chrome audio createjs soundjs