Chrome已不再支持html中audio标签的autoplay属性

Chrome已不再支持打开浏览器自动播放声音,为了遏制一些广告对用户的影响,浏览器升级70.0后版本对音频自动播放限制,不能用代码触发音频播放事件必须由用户手动触发,主要目的是让用户自己触发,才可以播放。
这样的做法初衷可能有以下几点:

  1. 禁广告,不能自动播放了一定程度上起到了禁用广告的效果

  2. 为用户节省流量,因为视频音频加载时需要缓冲的会耗费用户流量,但是用户不一定会看这个视频或音频第一次打开不支持自动播放,就给了用户选择的空间,也给用户节省了流量

很多开发者有非常大致质疑声音,认为这样做不合理,谷歌在以前的版本改过一次,又放开了, 并在后面70版本中要做这样的一次更新,并为开发者留了时间去更改他们的代码。

查到的解决方案中很多文章中说的设置方案,其实已经没有用了。
看他的官方文档的解释,我想只要让用户触发了某个事件,就能绕过谷歌的这个限制,使播放音频的动作在变成合理的,就是用自定义事件触发来播放。

如果直接调用play()播放音频,会出现下面的报错:Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.
解决思路时候
把播放paly()调用放在事件回调中,再用定时器触发这个事件,便可以实现“自动”播放,此时调用play()方法不会出现报错。
自定义事件实现的大概代码是:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body id = "app">
	<div>bofang</div>
	<audio id="audio" src="http://downsc.chinaz.net/Files/DownLoad/sound1/202002/12505.wav" style="opacity:0" preload="auto" controls hidden="true"/>  
	<script>
		var myAuto = document.getElementById('audio');  

        var app = document.getElementById("app");
        // 监听事件
        app.addEventListener("mousemove", function(){
        	console.log("played");
        	myAuto.play();
        }, true);

        // 用定时器触发事件
		setInterval(function(){
			if ("createEvent" in document) {
			 var evt = document.createEvent("HTMLEvents");
			 evt.initEvent("mousemove", false, true);
			 app.dispatchEvent(evt);
			}
			else
			 app.fireEvent("onmousemove");
		}, 1000);

	</script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章