iOS Safari 17.4 beta中AudioContext resume失败:InvalidStateError求助
iOS Safari 17.4 Beta 下 AudioContext.resume() 抛出 InvalidStateError 问题
问题详情
- 环境:iOS Safari 17.4 beta,测试设备为iPhone 11
- 现象:调用
AudioContext.resume()时触发catch块,抛出错误:
InvalidStateError: Failed to start the audio device
代码示例
const context = new AudioContext(); window.handleClick = () => { console.log('state', context.state); context.resume().then(() => { document.write('state:' + context.state); console.log('state', context.state); }, (e) => { document.write('state:' + context.state + ' ' + e); console.error(e); }); };
临时修复建议
- 将AudioContext的初始化移至用户交互事件(如click)内部,避免提前创建上下文导致设备绑定异常:
window.handleClick = () => { const context = new AudioContext(); console.log('state', context.state); context.resume().then(() => { document.write('state:' + context.state); console.log('state', context.state); }, (e) => { document.write('state:' + context.state + ' ' + e); console.error(e); }); }; - 若需提前创建上下文,可在resume前检查状态,失败时尝试重建上下文:
let context = new AudioContext(); window.handleClick = async () => { if (context.state === 'suspended') { try { await context.resume(); } catch (e) { context.close(); context = new AudioContext(); await context.resume(); } console.log('state', context.state); document.write('state:' + context.state); } }; - 检查设备系统音频设置,确保未禁用Safari音频权限,或重启设备重试(beta版本可能存在临时缓存问题)
内容的提问来源于stack exchange,提问作者lannka
相关产品推荐
相关产品推荐

