Прочитав эту статью об использовании API файловой системы HTML5 в Google Chrome, я решил попробовать при включении его в упакованное веб-приложение.
Используя заметки и предоставленный код в качестве руководства, я составил довольно длинный сценарий следующим образом:
var FSA = FSA || {};
var fsys, root, fileReader, dropReader, dropContainer, btn = [];
window.addEventListener("load", function () {
window.requestFileSystem(PERSISTENT, 5242880 /* ~5MB */, function(fs) {
fsys = fs;
root = fsys.root;
}, FSA.error);
});
function createFile(path) {
root.getFile(path, {create:true, exclusive:true}, function() {
console.log(path+ " file created");
}, FSA.error);
};
function saveFile(name, data, mimetype) {
var e = this || null;
name = name || e.target.name;
data = data || e.target.result;
mimetype = mimetype || e.target.type;
root.getFile(name, {create: true}, function(fileEntry) {
fileEntry.createWriter(function(writer) {
writer.onwrite = function(e) {
console.log(name + ' written successfully to filesystem.');
FSA.getFile(name);
};
writer.onerror = function(e) {
console.log('Write failed: ' + e);
};
var bb = new BlobBuilder();
bb.append(data);
writer.write(bb.getBlob(mimetype));
});
}, FSA.error);
};
function openFile(file, fileTarget) {
root.getFile(file.name, null, function(entry) {
entry.file(function(file) {
reader = new FileReader();
reader.filename = file.name;
reader.onload = function(e) {
fileTarget = e.target.result;
};
reader.readAsText(file);
}, FSA.error);
}, FSA.error);
};
И в какой-то степени это, кажется, работает. Я могу использовать функцию createFile для создания файла и функцию saveFile для сохранения файла. Однако я не могу использовать функцию openFile, и все три функции возвращают следующую ошибку в консоли JavaScript:
Uncaught TypeError: Cannot call method 'getFile' of undefined
Я считаю, что проблема связана с переменной root
, но я могу ошибаться.
Поскольку это новый API и к тому же предварительная спецификация, доступно очень мало документации, которая поможет решить эту проблему.
Может ли кто-нибудь указать на проблему (проблемы) и, если да, предложить решение?
Спасибо за вашу помощь.
EDIT: я использую "канареечную сборку 10.0.639.0", поэтому я считаю, что мой браузер должен разрешать использование API в расширениях.