除非手动触发一次,否则HTML5音频无法通过Javascript播放

Jon*_* H. 35 javascript html5 android html5-audio

我正在尝试使用标签和javascript自动播放一个小的声音文件来启动它.

<audio id="denied" preload="auto" controls="false">
    <source src="sound/denied.wav" />
 </audio>
Run Code Online (Sandbox Code Playgroud)

然后通过javascript,在适当的时候:

$('#denied')[0].play()
Run Code Online (Sandbox Code Playgroud)

适用于我桌面上的Chrome.在Android 4.1.1中,除非在javascript尝试播放之前在HTML5音频控件上点击"播放",否则声音将无法播放.

所以基本上Android浏览器(股票或Dolphin)不播放音频,除非用户在javascript之前的某个时刻启动它.这是有意的吗?有没有办法解决?

FRa*_*FRa 14

就我而言,这是一个简单的解决方案:
https ://stackoverflow.com/a/28011906/4622767
将其复制并粘贴到您的chrome中:

chrome://flags/#autoplay-policy
Run Code Online (Sandbox Code Playgroud)

我的网页应用程序有很多页面重新加载,所以我不能强迫用户每次都按下按钮; 但它是供内部使用的,所以我可以强制用户使用chrome并配置该选项.

  • 这解决了我,每个人访问我的网站怎么样? (3认同)
  • 警告:此选项有一个新名称:自动播放策略。 (2认同)
  • 对于较新版本的 chrome,我必须执行以下操作“设置 -&gt; 隐私和安全 -&gt;(其他内容设置)声音 =&gt; 将站点/文件添加到允许列表”如果您需要在本地运行某些内容,这非常有用。这些解决方案不适合您网站的访问者。 (2认同)

Jon*_* H. 10

那么,就我的目的而言,这就是我所做的:

幸运的是,在用户可以触发启动音频的行为之前,他们必须单击一个按钮.我将元素的音量设置为0.0,并在单击此按钮时使其"播放".

在静音播放声音之后,我只需将音量属性设置回1.0,即可在没有用户干预的情况下播放.

  • Chrome 58.0.3029.110在这里,这个技巧不起作用...:/ (2认同)

Rob*_*nch 9

我知道在移动safari中,任何对play()的javascript调用必须与用户初始化click事件在同一个调用堆栈中 .使用javascript触发器欺骗点击也不起作用.

在我的nexus 7上,我可以确认,除非用户点击触发了javascript,否则它无法播放.


Eli*_*iah 6

主要问题是声音(在iOS和Android上)必须由用户点击触发。我的解决方法非常简单。将其绑定audio.play()到click事件监听器,然后立即将其暂停。从那时起,声音就完美了。

var myAudio = new Audio('assets/myAudio.mp3');
...
button.addEventListener("click", function() {
    myAudio.play();
    myAudio.pause();
    ...
});
Run Code Online (Sandbox Code Playgroud)

  • myAudio.play()返回一个承诺!这段代码将导致异常:使用then方法。例如:`myAudio.play()。then(()=&gt; {myAudio.pause()})` (4认同)