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

时间:2017-08-29 14:24:58

标签: javascript typescript revokeobjecturl

我的情况是用户将图像设置为URL或转换为blob对象URL的字节。我的理解是,为了防止资源泄漏,我应该在更改时释放blob对象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);
    }
}

这是正确的方法吗?有没有更好的方法呢?

我会注意到我已经尝试在对象网址的字符串上调用URL.revokeObjectURL并且它似乎工作正常,所以我也不清楚它有多重要我正确地确定是否需要释放URL。

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

1 个答案:

答案 0 :(得分:0)

你是对的,我认为目前没有别的办法了。