这个其实算是老生常谈的问题了,IOS 的安全机制导致你无法自动播放音频,很多人用一些触摸事件来模拟用户操作,然后去触发 play 事件。不过今天我的问题不太一样,这个项目是在微信浏览器中运行的一个 webapp ,用了 vue。 本身是一个文章阅读模块,他会动态的去获取文章的音频,然后去播放,但是在安卓下正常,ios 下会出现无法播放的问题。要知道微信中利用 wx.ready 这个回调其实是可以避开 ios 的阻止播放问题的,但是我依旧不行。

找了很多资料,最后总结一下解决办法。

  1. audio标签放置在 app.vue 中 必须全局 不要去动态的摧毁重建他 会导致安全机制重新启动(放置到某个组件中也行,但是这个组件必须永远存活)
  2. 在 audio 标签初始化渲染的时候 在 src 放置一个空的音频文件地址 并在 wx.ready 的回调中调用他的 load 方法
  3. audio 标签要设置 controls 这个属性

接下来你动态获取 src 然后在 wx.ready 中调用 play 和 pause 方法应该都是正常的。总得来说只要你一开始成功避开这个安全机制,接下来这个 audio 你都可以随便操作了。