关于IOS微信端ajax回调无法自动播放audio的解决方法

关于IOS微信端ajax回调无法自动播放audio的解决方法

首先呢我先介绍一下,我是PHPer但是公司没有前端,所以前端也是我来负责,但博主前端是个渣渣小白啊。。。公司需要做一个外卖系统,里面有个功能是有订单的时候就自动语音提醒,类似美团饿了么那种。很简单,直接用ajax和audio标签就能实现。

<audio id="music"  preload="auto" src="mp3.mp3"></audio> 
<script>
	$(function(){
		var music = document.getElementById('music');
		$.post("ajaxUrl", function(data){
				if(data == 'success') {
					music.play();
				}
		});
	})
</script>

简单粗暴,但是问题来了,用手机打开的时候发现并没有声音!一开始以为是代码问题,就改了一遍,但是在手机端还是不行。就去找了百度爸爸,发现了一个问题,IOS是不允许audio自动播放的,那且不是实现不了这个功能?但是我记得很多网页都有自动播放的功能啊,我觉得这个问题一定能解决的。所以又找了百度爸爸,百度上面有很多方案,这里我总结一下。

第一种:利用监听WeixinJSBridgeReady接口来实现自动播放

document.addEventListener("WeixinJSBridgeReady", function () { 
	music.play(); 
 }, false); 

亲测没效果

第二种:利用wx.ready()接口来触发自动播放

wx.ready(function(){
	music.play();
});

这种方法可以实现自动播放,但是问题来了,我把它放进ajax里面之后就不出效果了。很头疼,怎么回事呢,心态有点小崩。

抽支烟,想一下,发现一个问题,竟然wx.ready能够实现自动播放,那为什么放到ajax里面就不能播放了呢。然后我做了一个测试,外面放了wx.ready,在ajax里面直接放了music.play(),再做个定时器,代码如下

$(function(){
		var music = document.getElementById('music');
		wx.ready(function(){
			music.play();
		});
		setInterval(function(){
			$.post("ajaxUrl", function(data){
					if(data == 'success') {
						music.play();
					}
			}, 7000);
		});
	})

神奇的事情发生了,只要一进去就能播放声音,然后就连续播放,但还有一个问题就是没有新订单的时候还是会自动播放一次。总结出一个结论就是:在IOS上面,audio只要能被触发播放一次,那么它接下来就能被ajax回调连续触发。
最后一个问题就比较容易解决了,只要第一次播放的是空audio,等ajax回调之后再赋一个src属性那么久可以了。

完整代码

<audio id="music"  preload="auto"></audio> 
<script>
	$(function(){
		var music = document.getElementById('music');
		wx.ready(function(){
			music.play();
		});
		setInterval(function(){
			$.post("ajaxUrl", function(data){
					if(data == 'success') {
						music.setAttribute("src","mp3.mp3");
						music.play();
					}
			}, 7000);
		});
	})
</script>

搞定!如果对你有帮助的话可以给个赞或者收藏么,第一次发帖,有什么地方不对或者有疑问的评论一下哈,么么~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值