【问题标题】:domexception thrown while playing audio in Chrome在 Chrome 中播放音频时抛出 domexception
【发布时间】:2019-04-26 16:12:19
【问题描述】:

您好,我在 Chrome 中播放音频时遇到异常。

这是我播放音频的功能

$(document).ready(function ()
{
    generateAlarm();
});

function generateAlarm()
{
    alarm_1 = new Audio();
    alarm_1.src = '/Content/assets/sounds/alarm_1.mp3';
    const playPromise = alarm_1.play();

    if (playPromise !== null)
    {
        playPromise.catch(() => {
           const btn = $('#playAlarm');
           btn.click();
         });
    }
}

document.getElementById('playAlarm').addEventListener("click", handlePlayButton, false);

function handlePlayButton()
{
    if (alarm_1.paused) {
        generateAlarm();
    }
    else {
        alarm_1.pause();
    }
}

谁能告诉我上面的代码有什么问题? 提前谢谢你。

【问题讨论】:

  • 你的音频真的在加载吗?
  • 当我在加载事件处理程序中调用 generateAlarm 时播放音频,但是当我刷新页面时,我得到了未捕获的异常。
  • 这可能是因为 chrome 不允许您在没有用户交互的情况下自动播放音频/视频。如果用按钮调用函数,还会发生吗?
  • 我尝试在上面的代码中做类似的事情,但仍然得到相同的异常加上资源不可用的异常

标签: javascript media


【解决方案1】:

不再允许自动播放音频,因为它令人讨厌并且经常被滥用。您必须先等待用户与页面交互。您可以通过 google 查看本指南,了解如何使用新的 AudioContext api:https://developers.google.com/web/updates/2018/11/web-audio-autoplay

【讨论】:

    【解决方案2】:

    到目前为止,我能找到的唯一解决方案是像这样更改 chrome 自动播放策略:

    chrome://flags/#autoplay-policy

    并将其设置为

    不需要用户手势

    如果这是解决问题的正确方法,我不知道,但我不再遇到异常。如果有人有更好的主意,我将不胜感激。

    【讨论】:

    • 这不是正确的方法,因为它只适用于您的浏览器。您在 doc ready 函数中发布的代码仍然是自动播放声音的尝试。你不能这样做
    猜你喜欢
    • 2019-05-09
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2019-07-10
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多