• 问题说明

        最近客户让增加一个功能,有待办的消息时,需要播放声音进行提醒。

        风格火火的就去干了,调试时候,发现用按钮触发播放事件能正常出声音,但是使用定时器去触发播放事件时就报错了如下:

        Uncaught (in promise) NotAllowedError: play() failed because the user didn't interact with the document first

        经过分析可能就是浏览器的安全性措施,只能用户触发播放才行

  • 解决办法

        audio标签增加muted=true属性,该属性的作用的就是让视频不要自动播放

<audio id="WaitTaskPlayer" muted="true">
      <source src="/audio/WaitTask.mp3" type="audio/mp3"/>
</audio>

        然后,窗体自定义事件,增加鼠标点击把muted=false的操作

    document.body.addEventListener('mousedown', () => {
        var player = document.getElementById("WaitTaskPlayer");
        player.muted = false;
    },false);

        最后就是你的正常播放视频事件的处理

    function PlayTask() { 
        var player = document.getElementById("WaitTaskPlayer");
        player.play();//播放
    }
    setInterval(PlayTask, 1000 * 60);

        经过测试,你只要鼠标点击页面任何地方后,自动播放的功能就可以正常用了,有点取巧了,但是对应管理后台来说,操作人员进入主页后,肯定会操作鼠标的,所以也算凑合能用。

        本人非专业前端,都是拼凑的代码,这个地方能正常的底层逻辑也讲不太明白。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐