音频元素中的自动播放属性偶尔工作

Evi*_*Evi 5 html javascript html5-audio

我尝试在 w3school 示例中向播放器添加自动播放功能:https : //www.w3schools.com/tags/att_audio_autoplay.asp

我所做的是将示例中的代码复制粘贴到此服务器的索引文件,删除 ogg 播放器,在与索引文件相同的位置添加一个 mp3 文件,并确保 mp3 文件的名称与中的名称匹配源标签。

为了透明起见,这是代码:

 let x = document.getElementById("myAudio");
        var test_autoplay = document.getElementById("myAudio").autoplay;
        console.log('autoplaying:    ', test_autoplay);
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
    <html>
    <body>
    
    <h1>The audio autoplay attribute</h1>
    
    <p>Click on the play button to play a sound:</p>
    
    <audio id="myAudio" controls autoplay>
      <source src="elrio.mp3" type="audio/mpeg">
      Your browser does not support the audio element.
    </audio>
    
    </body>

    </html>
Run Code Online (Sandbox Code Playgroud)

这应该是一件非常简单的事情。但是,在移动设备中它不起作用。我必须单击按钮才能播放音频。在桌面设备中,有时它会在页面加载后立即播放,有时则不会。

我检查了控制台错误,没有。网络选项卡也没有显示任何错误。

我尝试使用 javascript 打印自动播放属性,如下所示:

<script>
    let x = document.getElementById("myAudio");
    var test_autoplay = document.getElementById("myAudio").autoplay;
    console.log('autoplaying:    ', test_autoplay);
</script>
Run Code Online (Sandbox Code Playgroud)

每次加载页面时,test_autoplay 的值为 true,即使它没有实际播放。

我已经阅读了 Lawrence Cherone 评论中的链接,并理解为什么不鼓励使用自动播放属性。但是,在某些情况下(例如音乐播放网站),我认为应该允许自动播放。此外,如果自动播放根本不起作用,我会理解。我想弄清楚的是,在这个简单的页面中,我是如何从 w3schools 复制的,有时有效,有时却无效。

操作系统版本:Windows 10。浏览器:Google Chrome,版本 80.0.3987.132(官方版本)(64 位)

Cod*_*ing 3

这是一个棘手的问题。我能够重现你所看到的,但我想我已经弄清楚了。

如果您允许网站播放音乐超过 7 秒,则下次访问时将允许自动播放。如果您在 7 秒结束之前停止播放、关闭或重新加载选项卡,网站将失去自动播放的能力,直到您再次播放音频超过 7 秒

Chrome自动播放

此行为特定于 Chrome(您提到您正在使用 Chrome)。Chrome 会记录用户允许播放音频的网站。它将其存储在媒体参与指数中。chrome://media-engagement/您可以通过在地址栏中输入内容来查看 Chrome 的计数。如果您允许网站播放音频超过 7 秒,您应该会看到它列在此处。有关 Chrome 在自动播放方面的行为的更多信息,请参阅此处此处描述了媒体参与度指数,但由于 Chrome 的更改,部分文档已不再是最新的。

Javascript 检查自动播放权限

此外,您的 JavaScript 代码片段(复制如下)似乎正在尝试检查是否autoplay已启用。

document.getElementById("myAudio").autoplay
Run Code Online (Sandbox Code Playgroud)

事实上,这只是检查该autoplay属性是否在 HTML 标记上设置,它总是如此。

要测试是否允许自动播放,请使用以下代码片段:

document
  .getElementById('myAudio')
  .play()
  .then(() => console.log('autoplay success!'))
  .catch(e => console.log(e))
Run Code Online (Sandbox Code Playgroud)

相关信息

这个答案描述了一种“欺骗”Chrome 使其始终自动播放的方法,尽管我还没有亲自测试过这一点。