Когда я могу вызвать revokeObjectURL в расширении Chrome с фоновыми сценариями и сценариями содержимого?
Я загружаю файлы из локальной файловой системы с помощью XMLHttpRequest. Я следую предложению, сделанному в этом SO-вопросе - передать большой двоичный объект или файл из расширения Chrome
Это запускается в фоновом скрипте со следующим кодом
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, созданных в фоновом сценарии, я могу вызвать revokeObjectURL только после того, как сценарий содержимого получит файл и создаст новые объекты URL, я прав? Во-вторых, я не могу вызывать revokeObjectURL для URL-адресов, созданных в сценарии содержимого, пока файлы не будут безопасно загружены на веб-страницу.
Если я прав, могу ли я вызвать revokeObjectURL для URL-адреса, созданного фоновым скриптом в скрипте контента?