解决ios下的微信打开的页面背景音乐无法自动播放

在做各种HTML5场景页面的时候,插入背景音乐是一个很普遍的需求。我们都知道,IOS下的safari是无法自动播放音乐的,以至一直以来造成一种错误的认识,iso是无法自动播放媒体资源的。直到微信火爆起来,我们发现IOS的微信里面打开的页面却可以实现自动播放。这种情况颠覆了我之前的认知。但是,但是。。。最近的项目,又发现了一个头疼的问题。部分的IOS微信,打开有自动播放背景音乐的页面没有声音!!最头疼的是同款机子,相同的IOS系统,相同的微信版本!!没错,前端就是要经常这么折腾的,同一个问题,你以为找到了最终的解决方案,但是各种浏览器更新快速,昨天没问题,也许今天就有问题了。还好,这个问题暂时找到原因了,详情请看下文。

解决方案

先看下平时使用audio标签插入背景音乐的代码:

< audio  id = "Jaudio"  class = "media-audio"  src = "bg.mp3"  autoplay preload  loop = "loop" ></ audio  >

正常来说,上面的写法在安卓和大部分IOS机子的微信是可以播放的(safari这里就忽略讨论),可以扫一扫demo测试下你的手机:

如果上面的demo,你的ios微信可以播放,说明你的是大部分正常的手机。如果不能播放,哈哈,你成为了少部分不能正常播放的幸运者。。。

那代码有办法解决这少部分用户呢?如何解决呢?

答案的关键就是微信的WeixinJSBridgeReady事件。这个是微信自带提供的事件,测试发现,上面说的少部分的机子微信只要做微信ready后执行播放,就可以用代码实现自动播放功能了!具体代码请看下面:

< audio  id = "Jaudio"  class = "media-audio"  src = "bg.mp3"  preload  loop = "loop" ></ audio  >
function  audioAutoPlay(id){
     var  audio = document.getElementById(id);
     audio.play();
     document.addEventListener( "WeixinJSBridgeReady" function  () {
             audio.play();
     },  false );
}
audioAutoPlay( 'Jaudio' );

刚才如果你第一个demo不能播放的童鞋可以再扫一扫测试下(如果第一个demo已经测试正常的,这个肯定是正常的啦)

是不是听到声音了呢?!!解决方案就是这么简单。

后语

总结下吧,关于音乐自动播放的问题,现在可以分为三种:

1-支持audio的autoplay,大部分安卓机子的自带浏览器和微信,大部分的IOS微信(无需特殊解决)

2-不支持audio的autoplay,部分的IOS微信(本文提供的解决方案)

3-不支持audio的autoplay,部分的安卓机子的自带浏览器(比如小米,开始模仿safari)和全部的ios safari(这种只能做用户触屏时就触发播放了)

那么针对已知的三种情况,关于自动播放背景音乐的问题,我们来总结一下综合解决方案代码吧:

< audio  id = "Jaudio"  class = "media-audio"  src = "bg.mp3"  preload  loop = "loop" ></ audio  >
function  audioAutoPlay(id){
     var  audio = document.getElementById(id),
         play =  function (){
         audio.play();
         document.removeEventListener( "touchstart" ,play,  false );
     };
     audio.play();
     document.addEventListener( "WeixinJSBridgeReady" function  () {
         play();
     },  false );
     document.addEventListener( "touchstart" ,play,  false );
}
audioAutoPlay( 'Jaudio' );



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值