Javascript 什么时候调用URL.revokeObjectURL安全?
如果我理解正确,createObjectURL将创建一个表示文件或blob的URL。因为URL只是一个字符串,浏览器无法知道您何时使用完URL所代表的资源,因此提供了一个Javascript 什么时候调用URL.revokeObjectURL安全?,javascript,html,Javascript,Html,如果我理解正确,createObjectURL将创建一个表示文件或blob的URL。因为URL只是一个字符串,浏览器无法知道您何时使用完URL所代表的资源,因此提供了一个URL.revokeObjectURL函数 MDN显示: 所以有一些问题 在分配newImg.src后立即更改代码以撤销URL是否安全 var canvas = document.getElementById("canvas"); canvas.toBlob(function(blob) { var newImg = do
URL.revokeObjectURL
函数
MDN显示:
所以有一些问题
newImg.src
后立即更改代码以撤销URL是否安全
var canvas = document.getElementById("canvas");
canvas.toBlob(function(blob) {
var newImg = document.createElement("img");
var url = URL.createObjectURL(blob);
newImg.src = url;
// no longer need to read the blob as it's assigned to newImg.src
URL.revokeObjectURL(url);
document.body.appendChild(newImg);
});
我猜答案是“否”,因为newImg.src=url上可能没有任何内容代码>。此时它仍然只是一个字符串,在当前JavaScript事件退出之前将一直如此。还是这样
var canvas = document.getElementById("canvas");
canvas.toBlob(function(blob) {
var newImg = document.createElement("img");
var url = URL.createObjectURL(blob);
newImg.onload = function() {
// no longer need to read the blob so it's revoked
URL.revokeObjectURL(url);
// Use the URL again even though it's revoked
var newImg2 = new Image():
newImg2.src = url;
};
newImg.src = url;
document.body.appendChild(newImg);
});
在本例中,我正在分配newImg2.src=url
,即使我已经撤销了url。其想法是,newImg
仍在引用blob URL,因此可以说
someImage.src = someOtherImage.src
随时都可以。是吗好吧,按照@adeneo的建议,我测试了这个
$('test')。关于('change',函数(e){
var newImg=document.createElement(“img”);
var url=url.createObjectURL(e.target.files[0])
console.log(url);
newImg.src=url;
revokeObjectURL(URL);
文件.正文.附件(newImg);
console.log(url);
});
$('#test3')。关于('change',函数(e){
var newImg=document.createElement(“img”);
var url=url.createObjectURL(e.target.files[0])
console.log(url);
newImg.src=url;
newImg.onload=函数(){
revokeObjectURL(URL);
文件.正文.附件(newImg);
var i=新图像();
i、 src=newImg.src;
文件.正文.附件(一);
setTimeout(函数(){
var g=新图像();
g、 src=newImg.src;
文件.正文.附件(g);
}, 3000);
}
});代码>
使用前测试
测试使用撤销使用
1。可能不会,因为浏览器必须将URL解析为图像,这需要时间。2. newImg.src
不再是您的“旧”blob URL,它只是一个(数据)URL,就像来自任何其他来源一样。因此,“原始”已被撤销(并因此被移交给垃圾收集)不会以任何方式影响您在这里所做的事情。在我们有需要显示图像(通过src)的图像之前,您不能这样做吗?我们不应该称为“撤销”?我在将blob设置为img
src之后撤销了它,一切都很好。在我将blob设置为background image
css属性后,我撤销了它,一切都不好!使用了Firefox。如果您在撤销之前使用URL,我希望imgs可以正常工作,但如果您在撤销之后尝试使用URL,则imgs不会正常工作。
someImage.src = someOtherImage.src