Как читать zip-архив с помощью JSZip в Firefox SDK

Я хочу, чтобы надстройки работали для локального извлечения zip-файла, как это (здесь). Но у меня проблема при использовании Firefox SDK. Который не может быть прочитан zip, потому что что-то не так при получении пути к fileinput и ошибках в неподдерживаемом формате, потому что dataType не ArrayBuffer.

HTML

<input type="file" name="file" id="import" class="hide" />

myscript.js

var fileInput = document.getElementById('import');
fileInput.addEventListener('change', function(e) {
    var zipFileToLoad = fileInput.files[0];
    var tampJson = [];
    JSZip.loadAsync(zipFileToLoad)
            .then(function(zip) {
                console.dir(zip);
                zip.forEach(function (relativePath, zipEntry) {
                    if(zipEntry.dosPermissions == null){
                        alert('Permissions trouble !')
                    }
                    if(typeof(zipEntry['_data']['compressedContent']) != 'undefined'){
                        //var text = String.fromCharCode.apply(null, new Uint8Array(zipEntry['_data']['compressedContent']));
                        var text = new TextDecoder("utf-8").decode(zipEntry['_data']['compressedContent']);
                        var dec = text.toString();

                        var json = JSON.parse(dec);
                        if(json != null){
                            var keys = ['name', 'description', 'data', 'created_at', 'updated_at'];
                            keys.forEach(function(key){
                                if (key in json){
                                    if(key == keys[keys.length - 1]){
                                        tampJson.push(json);
                                    }
                                }else{
                                    dialog({
                                        title: "Warning",
                                        description: "<b>Wrong format, </b> are you sure to continue?",
                                        yesButton: "yes",
                                        cancelButton: "No",
                                        yesCallback: function() {
                                            $(this).closest('.overlay').removeClass("active");
                                        },
                                        cancelCallback: function() {
                                            $(this).closest('.overlay').removeClass("active");
                                            return false;
                                        }
                                    });
                                }
                            });
                        }else{
                            alert('format parse gagal');
                        }
                    }
                });
                if(tampJson.length > 0){
                    saveByImport(tampJson, 0);
                }else{
                    alert('Oops file empty');
                }
            }, function (e) {
                alert('Oops import fail '+ e);
            });

Ошибка в консоли. Я просто не могу ArrayBuffer из fileinput. Этот скрипт может работать в расширении Chrome, но не работает в Firefox SDK. Поэтому, пожалуйста, помогите мне решить эту проблему.


person richees    schedule 12.07.2016    source источник
comment
Как конкретно это не работает? Чего вы ожидаете? Что случается? Какие сообщения вы видите в консоли браузера? Какой файл вы пытаетесь прочитать? и т. д. Предоставьте полный минимальный воспроизводимый пример. Это означает, что достаточно кода, чтобы на самом деле иметь надстройку. Хотя технически весь код должен быть в вопросе, помогает даже ссылка на репозиторий GitHub. Любая проблема, с которой вы сталкиваетесь, может легко зависеть от гораздо большего, чем код, который вы предоставили, особенно в надстройке. В общем, мы должны быть в состоянии воспроизвести любую проблему, с которой вы столкнулись, чтобы помочь вам.   -  person Makyen♦    schedule 12.07.2016
comment
Пожалуйста, отредактируйте свой вопрос, чтобы он соответствовал теме: Вопросы, требующие помощи в отладке (почему этот код не работает? ) должен включать: • желаемое поведение, • конкретную проблему или ошибку и • кратчайший код, необходимый для ее воспроизведения* в самом вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См.: * Как создать минимально воспроизводимый пример, О каких темах я могу здесь спросить? и Как мне задать хороший вопрос ?.   -  person Makyen♦    schedule 12.07.2016
comment
Спасибо @Makyen, я уже редактирую свой вопрос. Я надеюсь, что вы можете помочь мне   -  person richees    schedule 12.07.2016


Ответы (1)


Я использовал более старую версию jszip в своем аддоне здесь. Вы можете использовать jszip из моего репозитория и использовать его так, как это сделал я. См. здесь — https://github.com/Noitidart/Chrome-Store-Foxified/blob/master/resources/scripts/MainWorker.js#L195

person Noitidart    schedule 13.07.2016