Сохранение файла без диалогового окна сохранения в приложениях Chrome

В моем приложении Chrome я записываю некоторые данные в файл. Я использовал следующий код, доступный на официальном сайте в разделе API хранилища.

chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
writableFileEntry.createWriter(function(writer) {
  writer.onerror = errorHandler;
  writer.onwriteend = function(e) {
    console.log('write complete');
  };
  writer.write(new Blob(['1234567890'], {type: 'text/plain'}));  
}, errorHandler);
});

Теперь мне нужно избежать появления диалогового окна сохранения и сохранить этот файл в предопределенном месте.

Возможно ли это сделать?


person Tharaka Deshan    schedule 30.12.2013    source источник
comment
Представьте себе риски безопасности, связанные с возможностью сохранять любой контент, который вы хотите, в любое место на жестком диске, которое вы хотите, без явного разрешения пользователя. Я сомневаюсь, что это возможно.   -  person Cerbrus    schedule 30.12.2013


Ответы (1)


Если вам нужны постоянные данные, но вы не хотите беспокоить пользователя расположением данных на локальном компьютере, у вас есть несколько вариантов:

Ни один из них не даст вам реальных файлов, к которым пользователь может получить доступ. Если пользователю (в дополнение к вашему собственному приложению) необходимо иметь доступ к написанному вами файлу, его нужно спросить, куда поместить файл. Как сказал Cerbrus в комментарии к вашему вопросу, молчаливое размещение файла где-то на компьютере пользователя было бы проблемой безопасности.

В Chrome 31 появилась новая функция chrome.fileSystem.retainEntry. Используя этот API, ваше приложение сохранит возможность сохранять несколько файловых записей, включая каталоги, при перезапуске приложения, так что вам не придется постоянно мешать пользователю выбирать расположение файла. Насколько я понимаю, существуют ограничения, в которых пользователю разрешено выбирать местоположения, поэтому вредоносное приложение не может указать пользователю, чтобы указать Chrome перезаписать системные файлы.

person sowbug    schedule 31.12.2013
comment
Просто для подтверждения, возможно ли как-то получить доступ к одному файлу, который вы могли бы обновить позже без диалога с пользователем? - person Giedrius; 04.01.2014
comment
Вот как я понимаю, keepEntry. Не забудьте проголосовать и принять, если в этом ответе чего-то не хватает. - person sowbug; 04.01.2014