【问题标题】:Autoplay property in audio element working sporadicaly音频元素中的自动播放属性偶尔工作
【发布时间】:2020-06-24 23:32:47
【问题描述】:

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

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

为了透明起见,代码如下:

 let x = document.getElementById("myAudio");
        var test_autoplay = document.getElementById("myAudio").autoplay;
        console.log('autoplaying:    ', test_autoplay);
<!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>

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

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

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

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

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

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

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

【问题讨论】:

  • 在这里查看解决自动播放限制的方法developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide 只是放置autoplay 不应依赖道具来工作
  • @Lawrence Cherone 我确实读过这篇文章。它在那里说,要使自动播放正常工作,至少应满足以下要求之一(静音音频、用户交互、用户行为等)。但是,在我的情况下,自动播放不能完全正常工作或不工作。比如说,在两分钟的时间范围内,有时它会起作用,有时则不起作用。这是它应该如何工作的吗?
  • 嗨,Evi,您能否添加一个操作系统/浏览器表(如果可能,包括版本),它在哪里工作,哪里没有?可以帮助在本地重现它。
  • 哦,您如何评估音频没有播放? (我假设您查看浏览器的音频播放器 UI)。它是通过网络选项卡加载的吗? (也许很难通过移动设备来判断 - 其中一些可以通过笔记本电脑进行调试)。
  • @Ryuno-Ki 也许我没有澄清这一点,但我是说从同一台机器、同一浏览器重新加载页面,而不修改代码,会产生随机结果。它可能无法播放几次重新加载,然后突然自动播放。我不知道为什么会发生这种情况,因为我预计至少会有一致的行为。我可以看出音频没有在桌面上播放(让我们暂时忘记移动设备),因为我听不到任何音频并且标签中的播放符号没有显示。

标签: javascript html html5-audio


【解决方案1】:

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

如果您允许网站播放音乐超过 7 秒,它将允许自动播放以下访问。如果您在 7 秒结束前停止播放、关闭或重新加载标签,则网站将无法自动播放直到您再次播放音频超过 7 秒。 p>

Chrome 自动播放

此行为特定于 Chrome(您提到您正在使用)。 Chrome 会记录用户允许播放音频的网站。它将其存储在媒体参与指数中。您可以通过在地址栏中输入chrome://media-engagement/ 来查看 Chrome 的计数。如果您允许您的网站播放音频超过 7 秒,您应该会在此处看到它。有关 Chrome 自动播放行为的更多信息是available here。媒体参与指数为described here,尽管由于 Chrome 中的更改,某些文档不再是最新的。

自动播放权限的Javascript检查

此外,您的 javascript 代码 sn-p(在下面复制)似乎正在尝试检查 autoplay 是否已启用。

document.getElementById("myAudio").autoplay

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

要测试是否允许自动播放,请使用这个 sn-p:

document
  .getElementById('myAudio')
  .play()
  .then(() => console.log('autoplay success!'))
  .catch(e => console.log(e))

相关信息

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多