autoplay标签在chrome中失效的问题

早在我的第一期前端五子棋中就遇到这个令人头疼的问题,最开始是由于谷歌版本的更新,为了更安全所以就取消autoplay这个自动播放的功能,后来我也再网上搜索到了很多解决方案,也只是瞎猫碰到死耗子恰巧解决了整个问题,至于我在前端五子棋第二版所说的那个解决方案,仅仅是由于服务器不支持中文,使得中文名乱码而找不到mp3音频所导致的问题。
进入正题,可以参看我给出的五子棋的代码为例来叙述我的解决过程。(两版本对于此问题的处理代码是一样的)
首先,网上最流行的一劳永逸的方法是直接更改谷歌浏览器对于Autoplay 的默认设置。
详细步骤如下:
在chrome 浏览器中输入:chrome://flags,搜索“Autoplay policy”,默认为“Default”,修改为 “No user gesture is required” 就可以了
显然,这种方法我使用失败了,失败的原因是根本搜索不到Autoplay policy,估计应该就是我的谷歌有毒。所以后面的方法我只能从代码的角度来解决。
用代码解决,说白了也就是自己用代码实现autoplay的功能,也就是变成“手动的自动播放”。
此时,肯定是需要js代码来实现,其实在这里用代码实现也就一行代码而已:

document.querySelector('.music').play();

运气好,就直接成功了,想手动暂停音乐,可以使用下面的一行代码:

document.querySelector('.music').muted = true;

详细细节场景可以参看前端五子棋代码。
但是如果运气不好,就可能出现如下的界面显示:
在这里插入图片描述
幸好这个exception挺良心,错误的最后面还给出了一个连接,点进去看看:
在这里插入图片描述
这个页面给出了好几种解决方案。比如使用iframe标签,默认设置浏览器为静音模式然后再手动取消静音,捕获因此问题带来的异常并在catch块里面进行操作等等。
有兴趣的伙伴可以参照原本自行尝试,这里我就不多做介绍,因为这个页面的所有方法也没能帮我解决掉这个问题。
那么问题到底出在哪呢?这也是为什么我最开始说有一定幸运的成分。
首先,我们知道报错是因为play()这个方法有问题,但是谷歌本身有不能支持autoplay,并且还无法修改谷歌对此标签的默认设置,这就真的很脑壳疼。
直接给出答案吧,我这里之所以报出这个错误是因为我在js文件中直接调用此方法,而恰巧我在程序里使用play方法都是在绑定的事件函数中调用能够正常运行,真的很amazing!
虽然我目前还不知道这是什么原因,但是事实上真的是可以这么用。(知道原理的大佬欢迎评论区赐教),至于play方法是否还支持在普通函数中的调用我没有去测试,有兴趣的伙伴可以自己去玩玩。

猜你喜欢

转载自blog.csdn.net/asd0356/article/details/104866106