IE释放blob网址

 狡兔死走狗喷Henry 发布于 2023-02-09 15:02

我有两个音频文件,必须一个接一个地播放.为此,我使用XHR下载了这两个文件

var xhr = new XMLHttpRequest();
xhr.open('GET', fileURL, true);
xhr.responseType = 'arraybuffer';

xhr.onload = function () {
  data = new Uint8Array(xhr.response);
  //... other handling code
};

并从他们那里构建了一个Blob

var blob = new Blob([data], {type: 'video/mp4'})

这些我用来构建Blob URL

var url = URL.createObjectURL(blob)

然后将其注入标签.(audioDOM.src = url;)

此过程适用于Chrome和Firefox.但IE11有时会给我一个问题,它会显示以下通知:

通过关闭为其创建的blob来撤消一个或多个blob URL.这些URL将不再解析,因为已释放支持URL的数据.

然而,最奇怪的部分是它对第一个文件起作用(在IE中),但对第二个文件不起作用.它们都对整个过程使用相同的代码,只需使用不同的代码即可fileURL.这两个文件都存在,已正确下载并已记录到控制台进行验证.

我试图在构造blob之前复制数据,但似乎并不重要:错误仍然存​​在.

有谁知道导致问题的原因以及如何解决问题?

在sbgoran之后编辑:整个脚本在单个文档上运行,该文档未被重新加载.我仍然感到困惑,为什么会这样.我确实设法通过在音频无法加载时循环和创建新URL来创建变通方法,但这不是一个可行的解决方案.奇怪的是,上述方法随机失败:有时URL在加载到标签时可用,有时则不是.

1 个回答
  • 除了sbgoran的回答,我还有一个可能的原因-作为WHATWG的邮件列表上的讨论,有一个在IE浏览器导致的Blob进行垃圾回收时,指向它的变量超出范围的错误-即使仍然存在对象的网址指向尚未撤销的Blob.

    只要需要对象URL,解决方法就可以依赖于保留变量中的原始Blob对象,然后使变量无效并随后撤消其对象URL.

    2023-02-09 15:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有