document.addEventListener('WeixinJSBridgeReady', () => audio.play().catch(() => {}));
button.onclick = () => audio.play().catch(() => {});

活动页的提示音在微信 iOS 里一直处于 pending,currentTime 停在 0,控制台没有报错,同一段 audio 在 Safari 能正常播。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,微信 iOS 的音频要等 WeixinJSBridge 就绪后才能播放,页面加载完直接 play 会被挂起。没有用户手势时自动播放也被限制。

围绕「微信音频播放」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:监听 WeixinJSBridgeReady 再执行 play;把播放挂到用户第一次点击上 不要自动播;play 返回的 Promise 加 catch 处理中断;微信 iOS 和安卓各测一次。

改完只确认一件事:进入页面后点一次按钮音频立即播放,currentTime 正常走动,不再是 pending。

作者 9823189