解决audio自动播放无效问题

问题描述

在360或者qq浏览器,audio的自动播放属性目前为止是有效的,网页的body里面插入下面代码后,打开页面就会自动播放音乐。

<audio autoplay="autoplay" loop="loop" preload="auto"
            src="http://music.163.com/song/media/outer/url?id=1337065812.mp3">
</audio>

但是Edge、谷歌等浏览器是不支持音乐自动播放的,通常会报错。
Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first.
在这里插入图片描述
我们看一下谷歌浏览器怎么说的。(已自动翻译为中文)https://goo.gl/xX8pDD
在这里插入图片描述
当然下面还提出了一些解决办法,下面我会给出几个我已经测试过的解决办法。

解决办法1

上面也说了可以始终允许静音自动播放,用户可以通过点击按钮使其播放,这个方法很多平台都在使用。(比如网页浏览一个b站视频,需要点击播放音频按钮才会播放音频)
在body中插入如下代码即可。(按钮样式需要自己找一个)

<video id="video" muted autoplay src="http://music.163.com/song/media/outer/url?id=1337065812.mp3"></video>
<button type="button" id="unmuteButton">Click Me!</button>
<script>
  unmuteButton.addEventListener('click', function() {
      
      
    video.muted = false;
  });
</script>

这个方法有一个问题就是音频一直在静音播放,你不知道进度,等你点击按钮可能音频已经播放几秒钟了。

解决办法2

使用网易云音乐的外链播放器,在网易云官网搜索一首歌曲之后进入播放页面,点击生成外链播放器。
在这里插入图片描述
使用iframe插件,复制代码。
在这里插入图片描述
但是要注意一点,代码中的src是不完整的,需要在前面加上http:

<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 
src="http://music.163.com/outchain/player?type=2&id=1464325108&auto=1&height=66" 
style="top:0px;position:absolute;z-index:2;left:0px"></iframe>

可以自己调整位置,让这个插件显示在页面上方,用户自己决定音乐的播放。

解决办法3

这个办法需要用户点击了页面才会自动播放音乐

<audio id="bgmusic" src="http://music.163.com/song/media/outer/url?id=1851244378.mp3" autoplay="autoplay" loop="loop" style="display: block; width: 3%; height:3%;"></audio>
    <script type="text/javascript">
  function toggleSound() {
      
      
            var music = document.getElementById("bgmusic");//获取ID
                console.log(music);
                console.log(music.paused);
            if (music.paused) {
      
       //判读是否播放
                music.paused=false;
                music.play(); //没有就播放
            }

        }
setInterval("toggleSound()",1);
</script>

解决办法4

使用按钮控制HTML5背景音乐开关,源码来自https://www.helloweba.net/javascript/321.html
大家可以自行下载。

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<title>演示:使用按钮控制HTML5背景音乐开关</title>
<style>
</style>
<link rel="stylesheet" type="text/css" href="../css/main.css" />

</head>

<body>

<div id="main">
   <div style="width:300px; height:120px; margin:100px auto">
		<audio id="music2" src="http://music.163.com/song/media/outer/url?id=1337065812.mp3"  loop="loop">你的浏览器不支持audio标签。</audio>
        <a href="javascript:playPause();"><img src="pause.gif" width="48" height="50" id="music_btn2" border="0" style="top: 10px;right: 10px;position: absolute;"></a>
   </div>
</div>
<script src="https://cdn.bootcss.com/jquery/1.8.2/jquery.min.js"></script>
<script>
$("#audio_btn").click(function(){
      
      
	var music = document.getElementById("music");
	if(music.paused){
      
      
		music.play();
		$("#music_btn").attr("src","play.gif");
	}else{
      
      
		music.pause();
		$("#music_btn").attr("src","pause.gif");
	}
});

function playPause() {
      
      
    var music = document.getElementById('music2');
    var music_btn = document.getElementById('music_btn2');
    if (music.paused){
      
      
        music.play();
        music_btn.src = 'play.gif';
    }
    else{
      
      
        music.pause();
        music_btn.src = 'pause.gif'; 
    }
}
</script>

</body>
</html>

如何找音乐链接可以看我的文章:如何获取喜欢的音乐id

解决办法5

换个浏览器打开html文件,目前360、qq浏览器是支持自动播放音频的,不用任何操作。

猜你喜欢

转载自blog.csdn.net/qq_44809707/article/details/122391613