ios 7.0.8 公众号页面无法自动播放 audio了?
发布于 5 年前 作者 stao 14128 次浏览 来自 官方Issues

android 的问题 刚解决完,ios 的问题又来了,行为变了。

    观察到的改变有以下 2 点:

  1. WeixinJSBridgeReady 事件没有了,无法监听此事件进行自动播放。

  2. 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))
    })

 </script>

</html>

目前我通过 touchstart 事件来启动音乐播放,作为备用方案。

2 回复

ios本身就不支持的

你好,iOS webkit 微信这边是一直没有放开 audio 标签的自动播放限制的。

根据 webkit 源码分析,应该是需要消费一次用户点击,才能调用 audio 标签的 play() 函数触发播放,否则执行 js 会抛出 NotAllowError 异常。

因此,这里你反馈的行为变了,有两种可能:

1. 你手机升级 iOS 13 新版本了, webkit 内核行为发生了改动;

2. 你的页面代码发布新版本了,导致用户点击态失去了

另外,帖子里的两个问题

  1. 微信 webview 在页面加载完成后,开始注入 jsbridge,并且一定会向页面发送 WeixinJSBridgeReady 事件的,因此没有监听到 WeixinJSBridgeReady 事件,可能是执行 addListener 在发出事件之后,或者页面一直没有加载完成(绿条一直在跑)

  2. 首先,Safari 和应用内置 wkwebview 的表现是有差异的,其次,在微信没有放开 audio 标签自动播放的前提下,audio 标签的 preload 事件之前排查问题时是发现在 iOS13 下是不会触发的

回到顶部