撤销Blob URL后,如何正确清理audio元素的src以释放Blob内存?
如何正确清理Audio元素的Blob源以触发垃圾回收?
问题背景
当通过fetch获取仅存于内存的音频Blob,并用URL.createObjectURL()生成绑定地址赋值给<audio>元素的src后,若需要撤销该objectURL(调用URL.revokeObjectURL())并让Blob被垃圾回收,同时要保留audio元素、不需要立即设置新音频源,直接设置audio.src = ""会出现问题——此时audio的src会被自动替换为当前页面的HTTP地址,而非空值,还可能引发不必要的请求或控制台警告。
可行方案
经测试,使用audio.removeAttribute('src')是符合需求的干净方案:
- 执行后
audio.src会严格等于空字符串(""),可正常通过audio.src === ""判断状态 - 不会触发控制台报错
- 仅会触发
<audio>元素的emptied事件,符合预期行为 - 能确保Blob不再被audio元素引用,可被垃圾回收机制正确回收
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

