В расширении Chrome со сценариями Background и Content, когда я могу вызвать revokeObjectURL? - PullRequest
0 голосов
/ 20 февраля 2020

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

...