android 的问题 刚解决完,ios 的问题又来了,行为又又又又又又变了。
观察到的改变有以下 2 点:
WeixinJSBridgeReady 事件没有了,无法监听此事件进行自动播放。
audio 元素不会预加载音乐文件,loadedmetadata 也不会被发射。在 safari 里打开下面的代码会有直接有 alert,在微信里打开下面的页面,只有点击播放的时候才会有 alert
< html > < body > < audio loop preload controls = "controls" id = 'audio' src = "https://www.meipian.cn/service/music/redirect/83969?song_id=7A932141D63509775569BB40AF7AEF08&song_list_id=D9A047C7540C751F&source_platform=tme&id=83969" ></ audio > </ body > < script > document.getElementById('audio').addEventListener('loadedmetadata', data => { console.log(data) alert(JSON.stringify(data)) })
</html> |
目前我通过 touchstart 事件来启动音乐播放,作为备用方案。
你好,iOS webkit 微信这边是一直没有放开 audio 标签的自动播放限制的。
根据 webkit 源码分析,应该是需要消费一次用户点击,才能调用 audio 标签的 play() 函数触发播放,否则执行 js 会抛出 NotAllowError 异常。
因此,这里你反馈的行为又又又又又又变了,有两种可能:
1. 你手机升级 iOS 13 新版本了, webkit 内核行为发生了改动;
2. 你的页面代码发布新版本了,导致用户点击态失去了
另外,帖子里的两个问题
微信 webview 在页面加载完成后,开始注入 jsbridge,并且一定会向页面发送 WeixinJSBridgeReady 事件的,因此没有监听到 WeixinJSBridgeReady 事件,可能是执行 addListener 在发出事件之后,或者页面一直没有加载完成(绿条一直在跑)
首先,Safari 和应用内置 wkwebview 的表现是有差异的,其次,在微信没有放开 audio 标签自动播放的前提下,audio 标签的 preload 事件之前排查问题时是发现在 iOS13 下是不会触发的
1. 我一直以为你们针对 WeixinJSBridgeReady 时间开放了,自动播放,因为我们之前一直可以通过监听 WeixinJSBridgeReady 事件,在没有任何用户操作的情况下,完成自动播放。
2. 在您这边看来,ios 微信的页面在没有用户接触页面的情况下,是不可能完成自动播放的(即 mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.all),可以这么说么?如果是这样的话,那么和第 1 点里我们的认知是有出入的。请帮忙确认下么,如果是这样的话,我们也用再折腾了。
我们自己这边需要确认的有 2 点:
1. WeixinJSBridgeReady 现在 ios 微信里依然会触发。这点我需要确认下。
2. ios 13 早就发布,如果是 wkwebview 的行为发生了变化,那可能是 ios 最近的小版本开始的。我们的用户对音乐自动播放很敏感,之前我们没有接到投诉。这个我们也需要确认下。
另外,wkwebview 对于用户点击的(userInteractionAction)定义对我们来说是个黑盒,我们可以理解的是用户每一次对于页面的点击都会生产一次点击,至于进入页面时是否自带一次点击,这个我们也在研究中,的确遇到很多游戏H5 页在页面加载时执行 audio.play() 是可以成功的。
看了一个竞品的页面也是可以的:http://m.eqxiu.com/s/kmRZTpGs
然后检查我们的页面,发现也 OK
https://www.meipian.cn/2k06jtj2?first_share_to=other&share_depth=1&first_share_uid=54179628&v=5.4.0
你看看能不能当做样本研究下。😂
ios本身就不支持的