1

Мне нужно получить размер пакета расширения. Для этого у меня есть этот код:Размер удлинителя Chrome Extension

chrome.runtime.getPackageDirectoryEntry(function(package) { 
    package.getMetadata(function(metadata) { 
    console.log(metadata.size) 
}) }) 

Проблема в том, что она всегда 4096. Всегда. Это ошибка, или я чего-то не хватает?

+0

Я DON» Полагаю, это возможно. –

ответ

1

Вы должны перечислить все файлы в пакете и вычислить размер, вот пример, который работает на странице фон/события:

function calcPackageSize(callback) { 
    var totalSize = 0; 
    var queue = [], xhr = new XMLHttpRequest(); 
    xhr.responseType = "blob"; 
    xhr.onload = function() { 
     totalSize += this.response.size; 
     calcFile(); 
    }; 
    chrome.runtime.getPackageDirectoryEntry(function(root) { 
     var rootDirNameLength = root.fullPath.length; 
     calcDir(root); 
     function calcDir(dir) { 
      dir.createReader().readEntries(function(entries) { 
       entries.forEach(function(entry) { 
        if (entry.isFile) { 
         queue.push(entry.fullPath.substr(rootDirNameLength)); 
         !xhr.readyState && calcFile(); // start the request chain 
        } else { 
         calcDir(entry); 
        } 
       }); 
      }); 
     } 
    }); 
    function calcFile() { 
     if (!queue.length) 
      return callback && callback(totalSize); 
     xhr.open("HEAD", queue.pop()); 
     xhr.send(); 
    } 
} 

Использование:

calcPackageSize(function(size) { console.log(size) }); 
+0

Нет, он вызывает сбой. –

+0

@ DanielHerr, я не могу воспроизвести ни на Chrome 46, ни на старых Chrome 31, [это минимальное расширение] (https://puu.sh/k54D3/4962ad74de/calcPackageSize.crx). Сохраните файл и перетащите его на открытую страницу chrome: // extensions, затем нажмите кнопку расширения, и он отобразит его размер в окне предупреждения. – wOxxOm

+0

Должно быть разрешено работать только на фоновом режиме, но это кажется довольно странным. –