如何跨浏览器正确处理 media.play() 承诺

问题描述

我正在尝试使用 videojs 播放一些音频。由于自动播放在浏览器中不可靠,因此他们建议blog post on the video js website 这样做:

let audioPlayer = videojs('audio-element');

audioPlayer.ready(function() {
           
   var promise = audioPlayer.play();

   if (promise !== undefined) {
       promise.then(function() {
           console.log('AUdio: Autoplay started!');
       }).catch(function(error) {
           console.log('AUdio: Autoplay was prevented.');
           // do something to let people start audio manually
       });
   }

});

这在 Chrome 和 Edge 中完美运行,但 Firefox 似乎永远无法解决这个承诺。使用调试器我可以看到它的状态挂起,但我的 console.logs 都没有被执行。

我怎样才能让它在 Firefox 中工作?

解决方法

我会这样做:

promise.then(function() {
// Autoplay started!
},function(error) {
// Autoplay was prevented.
});