原文链接: 音频播放错误的异常 [已解决]

上一篇: css 九宫格布局

下一篇: 随机数和数组乱序

会有两个错误

chrome

The play() request was interrupted by a call to pause().

safari

AbortError: The operation was aborted

错误的产生是由于在播放时资源未加载完毕, 在执行play后的等待时间内, 调用了pause方法导致的

播放时使用canplay 事件判断是否可以播放, 使用额外的标记位来记录状态, 只要在资源加载完成后才能播放和暂停, 或者直接catch住异常即可

https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canplay_event

play 返回一个promise, 如果有异常需要使用.catch语句捕获异常, 不能使用try catch, 这种语法不能捕获promise的异常

低端机可能会不返回promise, 需要特殊判断

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- <audio id="audio" src=""></audio> -->
    <script>
      // const a = document.getElementById('audio')

      const h = () => {
        const a = document.createElement("audio");
        a.setAttribute("src", "./t.mp3");
        try {
          const p = a.play();
          console.log("p", p);
          p.catch((e) => console.log("1,", e));
        } catch (e) {
          console.log("try", e);
        }

        try {
          a.pause();
        } catch (e) {
          console.log("catch", e);
        }
      };
      h()
      document.addEventListener("click", h);

      window.addEventListener("error", (e) => {
        console.log("error", e);
      });
    </script>
  </body>
</html>

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐