Я загружаю файлы из локальной файловой системы с помощью 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-адреса, который фоновый скрипт создал в контенте скрипт?