AbortError: play() 请求被对 pause() 的调用中断

Posted

技术标签:

【中文标题】AbortError: play() 请求被对 pause() 的调用中断【英文标题】:AbortError: The play() request was interrupted by a call to pause() 【发布时间】:2018-12-12 02:06:00 【问题描述】:

iam currenlty 试图修复这个 javascript 代码,但我似乎无法正确解决它仍然抛出

Uncaught (in promise) AbortError: play() 请求被中断 通过调用 pause()

我不明白这有什么问题,所以如果你们能帮助我,我会真的很高兴

这是代码

<html>
<head>
    <script src="nui://game/ui/jquery.js" type="text/javascript"></script>
    <script>
        var audioPlayer = null;

        window.addEventListener('message', function(event) 
            if (event.data.transactionType == "playSound") 

              if (audioPlayer != null) 
              audioPlayer.pause();
              

              audioPlayer = new Audio("./sounds/" + event.data.transactionFile + ".ogg");
              audioPlayer.volume = event.data.transactionVolume;

              audioPlayer.play();


            
        );
    </script>
</head>

【问题讨论】:

【参考方案1】:

我自己在玩声音时遇到了这个问题。下面的代码为我修复了它:

var soundPromise = audioPlayer.play();

//If the promise exists
if (soundPromise != undefined) 

    soundPromise.then(function(_) 
        //Pause and reset the sound
        sound.pause();
        sound.currentTime = 0;

    );


如果您有任何问题,请告诉我!

【讨论】:

Iam littarly 一直盯着这段代码看了 2 个小时,我不明白如何将它实现到我现在拥有的代码中。我有点脑残,所以如果你能再帮我一次,我真的很感激。 把它放在你打电话的任何地方.pause() @JackBashford 在您调用sound.pause(); 的那一行 - 您从哪里获得sound 变量? 这就是 OP 使用的任何声音 - 这只是一个占位符示例。【参考方案2】:

这是浏览器中的自动播放问题:简而言之,如果您不进行某些操作(例如单击、触摸),浏览器将不允许媒体自动开始播放。

可以参考:https://developers.google.com/web/updates/2017/09/autoplay-policy-changes

要解决这个问题,你应该把.play()的调用放在点击按钮的回调函数中,例如

playBtn.onclick = function()
  audioPlayer.play();

这不是一个问题,它实际上是一个规则。

【讨论】:

这不是自动播放 - 你会看到 OP 给我们的错误是 the play() request was interrupted by a call to pause()

以上是关于AbortError: play() 请求被对 pause() 的调用中断的主要内容,如果未能解决你的问题,请参考以下文章

Edge 17 - PushManager.Subscribe 失败并出现 AbortError

注册 ServiceWorker 返回 AbortError code:20

引用传递

Discord.js 无法执行

不能使用返回 play.mvc.WebSocket 的方法作为 Play 中请求的处理程序?

Play 框架中的请求队列