HTML5 — FileAPI — запись файлов

Я создаю приложение на JavaScript и HTML5. Мне нужно записать данные в определенный файл, поэтому я хочу указать путь к файлу в коде. Это не проблема сделать с:

function onInitFs(fs) {
    console.log('Opened file system: ' + fs.name);
}
window.webkitRequestFileSystem(window.TEMPORARY, 5 * 1024 * 1024 /* 5MB */, onInitFs, errHandl);

Но проблема в том, что это вызовет ошибку безопасности, потому что --allow-file-access-from-files не установлен для exe-файлов. Я не хочу настраивать его жестко для всех страниц. Я хотел бы установить это только для моей страницы, той, которую я открываю из локальной файловой системы.

Например, это может быть index.html:

C:\page\index.html.

Есть ли способ сделать это?

Я знаю только о manifest.json, но это будет означать, что мне придется распространять свое приложение через магазин Chrome. Для меня это неприемлемо, в таком случае мой проект не будет иметь никакого смысла.


person Xrew    schedule 31.10.2012    source источник
comment
зачем вам писать в конкретный файл?   -  person nycynik    schedule 01.11.2012
comment
Потому что мне нужно создать sth. как Тиддли Вики. Страница должна быть саморедактируемой.   -  person Xrew    schedule 01.11.2012


Ответы (1)


Идея FileAPI состоит в том, чтобы иметь виртуальную изолированную файловую систему, а не управлять файловой системой ОС. Вы не можете редактировать произвольный файл с пользовательского диска, это будет огромная дыра в безопасности.

Что вы, вероятно, захотите сделать, так это динамически создать страницу. Как в примере ниже, сначала сохраняется содержимое (html), затем загружается и добавляется на страницу:

function onInitFs(fs) {
  console.log('Opened file system: ' + fs.name);

  fs.root.getFile(FILE_NAME, {create: true}, function(fileEntry){
    fileEntry.createWriter(function(fw){
      fw.onwriteend = function(e){ console.info('Write completed'); }
      fw.onerror = function(e){ console.log('Error:'+e.toString()); }

      var blobToWrite = new Blob(['<span>test</span>'], {type: 'text/plain'});
      fw.write(blobToWrite);
    }, null);

    console.log(fileEntry.toURL());
  }, null);

    fs.root.getFile(FILE_NAME, {}, function(fileEntry) {

    fileEntry.file(function(file) {
       var reader = new FileReader();

       reader.onloadend = function(e) {
         var someDiv = document.createElement('div');
         someDiv.innerHTML = this.result;
         document.body.appendChild(someDiv);
       };

       reader.readAsText(file);
    }, null);

  }, null);
}

Надеюсь, это поможет :)

person Arnthor    schedule 15.10.2013