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

7rtdyuoh  于 2022-12-06  发布在  Go
关注(0)|答案(4)|浏览(298)

我创建了一个音频对象,并希望在用户离开窗口时播放它。因此,我的代码如下:

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

它在Firefox中运行得很好。如果我点击页面,然后将鼠标放在主体之外,它在Chrome中也运行得很好。但是,当我离开鼠标而没有点击页面时,控制台中会显示一个错误,音频也不会播放

未捕获(在承诺中)DOMException:play()失败,因为使用者未先与文件互动。https://developers.google.com/web/updates/2017/09/autoplay-policy-changes

但是,在这个example site中,它在不与页面交互的情况下工作得很好。我如何才能让它成为可能呢?提前感谢。

0x6upsns

0x6upsns1#

似乎他们使用音频上下文来播放声音。
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/

smtd7mpg

smtd7mpg2#

试试这个:
window.audio = new Audio( 'quite-impressed.mp3' ) $('body').on('mouseleave', function(){ audio.play() })

rbl8hiat

rbl8hiat3#

这对我在Chrome 77上很有效:

  • 在地址栏上:chrome://设置/内容/声音
  • 关闭“允许站点播放声音(推荐)”
  • 再打开
8e2ybdfx

8e2ybdfx4#

如果您js播放器函数没有运行,且您的代码是正确的,那么这可能会有帮助,您必须允许您的浏览器获取声音文件
只要后藤设置=〉隐私和安全=〉站点设置=〉声音.然后在添加到播放器部分添加您本地url。

相关问题