JavaScript play() 函数在 Chrome 中不起作用

吉图雷炎

我创建了一个音频对象并希望在用户离开窗口时播放它。所以,我的代码在这里:

$('body').on('mouseleave', function(){
    var audio = new Audio( 'quite-impressed.mp3' )
    audio.play()
})

它在 Firefox 中运行良好。如果我在页面中单击然后将鼠标移到正文之外,它也可以在 Chrome 中使用。但是,当我在没有点击页面的情况下离开鼠标时,控制台中会显示错误并且音频无法播放

Uncaught (in promise) DOMException: play() 失败,因为用户没有先与文档交互。https://developers.google.com/web/updates/2017/09/autoplay-policy-changes

但是,在此示例站点中,它无需与页面交互即可正常工作。我怎样才能使它成为可能?提前致谢。

海道

似乎他们使用 AudioContext 来播放该声音。
几个月前,Chrome 确实回来了关于阻止 AudioContext API 的问题,因为很多合理使用都没有为这种限制做好准备,因此被它破坏了。

但将于 2018 年 12 月发布的 M71 将重新启用该限制,您可以在此处阅读:https : //developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio

// this will work in Chrome < 70 but not af
onmouseout = e => {
  const ctx = new AudioContext();
  const osc = ctx.createOscillator();
  osc.connect(ctx.destination);
  osc.start(0);
  osc.stop(1);
}

外包的实例,因为 Stacksnippets 总是被授予用户手势:https ://jsfiddle.net/zy3ev8ka/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章