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 下是不会触发的