Javascript 检查URL是否是createObjectURL调用的结果的正确方法?

Javascript 检查URL是否是createObjectURL调用的结果的正确方法?,javascript,typescript,revokeobjecturl,Javascript,Typescript,Revokeobjecturl,我遇到了这样一种情况:用户将图像设置为URL,或者使用转换为blob对象URL的字节。我的理解是,为了防止资源泄漏,我应该在blob对象URL发生更改时释放它们,但我不确定是否正确检查了旧URL的类型。目前,我的做法是只检查url是否以'blob:'开头。下面是一个玩具示例函数,它演示了它似乎确实可以工作: var url; for (i = 0; i < 5; i++) { var oldurl = url; console.log('i = ' + i) if

我遇到了这样一种情况:用户将图像设置为URL,或者使用转换为blob对象URL的字节。我的理解是,为了防止资源泄漏,我应该在blob对象URL发生更改时释放它们,但我不确定是否正确检查了旧URL的类型。目前,我的做法是只检查url是否以
'blob:'
开头。下面是一个玩具示例函数,它演示了它似乎确实可以工作:

var url;

for (i = 0; i < 5; i++) {
    var oldurl = url;
    console.log('i = ' + i)
    if (i == 0 || i == 2 || i == 3) {
        console.log('Switching to Object URL')
        url = URL.createObjectURL(new Blob(new Uint8Array(0),
                                           {type: 'image/png'}));
    } else {
        console.log('Switching to URL')
        url = 'https://example.com/example-image.png';
    }

    if (oldurl && oldurl.startsWith('blob:')) {
        console.log('Freeing old object url')
        URL.revokeObjectURL(oldurl);
    }
}
var-url;
对于(i=0;i<5;i++){
var oldurl=url;
console.log('i='+i)
如果(i==0 | | i==2 | | i==3){
console.log('切换到对象URL')
url=url.createObjectURL(新Blob(新Uint8Array)(0),
{type:'image/png'}));
}否则{
console.log('切换到URL')
url='1〕https://example.com/example-image.png';
}
if(oldurl&&oldurl.startsWith('blob:')){
console.log('释放旧对象url')
revokeObjectURL(oldurl);
}
}
这样做对吗?有更好的方法吗

我会注意到,我曾尝试在非对象URL的字符串上调用
URL.revokeObjectURL
,并且似乎效果良好,因此我也不清楚正确地确定是否需要释放URL有多重要


注意:这是一个TypeScript脚本,但我认为这个问题在Javascript中同样有效,因此我将两者都标记为。

你是对的,我认为目前根本没有其他方法。

你是对的,我认为目前根本没有其他方法。

你找到其他解决方案了吗?我在想测试是否包含
blob:
您是否找到过其他解决方案?我在想测试是否包含
blob: