我正在使用 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 吗?