0

我正在使用 XMLHttpRequest 从本地文件系统上传文件。我正在遵循这个 SO 问题中提出的建议 - Pass large blob or file from chrome extension

这是在后台脚本中使用以下代码启动的

function uploadLocalFilesAndSend(msg){
var xhr = [], i;
var x = 0;
var filePaths = msg.UploadDocumentFileInfoList;
for (i = 0; i < filePaths.length; i++){
    (function(i){
        xhr[i] = new XMLHttpRequest();
        var url = 'File:///' + filePaths[i].FilePath;
        console.log('uploadLocalFilesAndSend - URL being used: ' + url);
        xhr[i].open('GET', url, true);
        xhr[i].responseType = 'blob';
        xhr[i].onload = function() {
            x += 1;
            var newURL = URL.createObjectURL(xhr[i].response);
                console.log('uploadLocalFilesAndSend - newURL: ' + newURL);
                msg.UploadDocumentFileInfoList[i].PathURL = newURL;
                if (x == filePaths.length) {
                    chrome.tabs.sendMessage(ipasTabID, msg);
                }
        };
        xhr[i].send();
    })(i);
}
}

随着每个文件的上传,createObjectURL 用于创建一个新的 URL 对象。这些 URL 然后通过消息传递到内容脚本。内容脚本几乎相同,再次在文件上调用 createObjectURL 会产生新的 URL。然后将这些 URL 发送到网页,然后使用它们获取相应的文件。

每次完成此操作时,我都会在后台脚本中有效地创建一组 URL 对象,然后在内容脚本中创建一组新对象。

我应该什么时候调用 revokeObjectURL?

我认为对于在后台脚本中创建的 URL 对象,我只能在内容脚本检索文件并创建新的 URL 对象后调用 revokeObjectURL,对吗?其次,在文件安全上传到网页之前,我无法在内容脚本中创建的 URL 上调用 revokeObjectURL。

如果我是正确的,那么我可以在背景脚本在内容脚本中创建的 URL 上调用 revokeObjectURL 吗?

4

0 回答 0