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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章