0

我想让插件像这样在本地提取 zip 文件(这里)。但是我在使用 firefox SDK 时遇到了问题。无法读取 zip,因为获取文件输入路径时出现错误,并且由于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。这个脚本可以在 chrome 扩展中工作,但不能在 firefox sdk 中工作。所以请帮我解决这个问题。

4

1 回答 1

1

我在这里的插件中使用了旧版本的 jszip。您可以使用我的存储库中的 jszip 并按照我的方式使用它。见这里 - https://github.com/Noitidart/Chrome-Store-Foxified/blob/master/resources/scripts/MainWorker.js#L195

于 2016-07-13T10:25:42.760 回答