Сохранить без запроса в упакованном приложении Chrome

Я начал искать пакетные приложения Google в Chrome, http://developer.chrome.com/apps которая кажется отличной технологией, но на ранней стадии.

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


person arpo    schedule 19.09.2012    source источник


Ответы (3)


У меня было несколько бесед с людьми, участвующими в разработке пакетных приложений, и, как и сегодня, вы не можете получить доступ к файловой системе без запроса за пределами изолированной программной среды приложений. Но это может произойти в будущем.

Но есть новый проект под названием Node-Webkit, который очень похож на упакованные приложения Chrome, где вы разрабатываете свое приложение в Chrome с помощью HTML, js и т. д., где вы также можете запускать nodejs в браузере. Используя это, вы можете получить доступ к файловой системе и многому другому.

Проверьте это здесь: https://github.com/rogerwang/node-webkit и https://github.com/rogerwang/node-webkit/wiki

Загружать и сохранять файлы в Node-Webkit очень просто. Это выглядит так

var gui = require("nw.gui");
var fs = require("fs");

//Save
fs.writeFile('message.txt', 'Hello Node', function (err) {
    if (err) throw err;
    console.log('It\'s saved!');
});

//Load
fs.readFile('message2.txt', 'utf8', function (err, data) {
    if (err) throw err;
    console.log(data);
});
person arpo    schedule 29.11.2012

Похоже, вы скоро сможете это сделать — см. https://groups.google.com/a/chromium.org/forum/#!topic/apps-dev/fu1TyjdYLEc

person kzahel    schedule 16.08.2013

Что-то вроде. Вы можете сохранить его в «рабочей области» вашего приложения, что означает, что файл будет сохранен, но пользователь или другие приложения не будут иметь к нему доступа. Он будет находиться в изолированном хранилище. Для этого просто используйте API файловой системы HTML5 (руководство здесь).

Вам нужно: "permissions": ["storage"] в вашем манифесте, и в вашем js вы можете сделать:

var onInitFsCallback=function(fs) {
  fs.root.getFile('log.txt', {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(fileWriter) {
      _this.fileWriter = fileWriter;
      fileWriter.onwriteend = onWriteEndCallback;
      fileWriter.onerror = onErrorCallback;
      fileWriter.write(myBlob);
      fileWriter.write(myString);
    }, errorHandler);

  }, errorHandler);

};
window.webkitRequestFileSystem([window.TEMPORARY or window.PERMANENT], sizeInBytes,
  onInitFsCallback, onErrorCallback);

Вы также можете проверить файловую систему вашего приложения с помощью Inspector Tools (Ресурсы -> Файловая система). Оттуда вы можете загружать или удалять файлы. В Chrome 24 вам необходимо включить эксперименты с инструментами разработчика в chrome://flags, щелкнуть меню настроек DevTools, эксперименты и включить проверку файловой системы.

С другой стороны, если вы хотите сохранить в произвольном месте за пределами песочницы вашего приложения, запрос пользователя требуется по соображениям безопасности.

person mangini    schedule 03.10.2012
comment
Спасибо, я посмотрю на это. Вы уверены, что это будет работать в упакованном приложении? - person arpo; 04.10.2012
comment
Да, это будет. Вам нужно: "permissions": ["storage"] в вашем манифесте и в вашем js вы используете: ` var onInitFs=function(fs) { fs.root.getFile('log.txt', {create: true}, function(fileEntry) { fileEntry.createWriter (function(fileWriter) { fileWriter.onwriteend = onWriteEndCallback; fileWriter.onerror = onErrorCallback; fileWriter.write(...); }, errorHandler); }, errorHandler); }; window.webkitRequestFileSystem([window.TEMPORARY или window.PERMANENT], sizeInBytes, onInitFsCallback, onErrorCallback); ` - person mangini; 04.10.2012
comment
(извините за плохое форматирование в комментарии. Добавлю в ответ) - person mangini; 04.10.2012
comment
Спасибо @mangini! Я искал это, и, к сожалению, это не то, что я ищу, но полезно знать в более поздние времена. Похоже, Adobe Air — это то, что мне нужно прямо сейчас. К сожалению, с тех пор, как Air кажется устаревшим в глазах Adobe. Было бы здорово использовать Chrome вместо этого. - person arpo; 11.10.2012
comment
@arpo, если вы лучше опишите свой вариант использования, я могу либо посмотреть, есть ли другое решение, либо, в последнем случае, поместить его в то, что мы не можем сделать сейчас, но пользователи запросили список для будущих разработок платформы. - person mangini; 13.10.2012
comment
Конечно, @mangini, я собираюсь создать инструмент для своей команды веб-разработчиков, с помощью которого мы сможем создать веб-проект. Я хочу иметь возможность создавать css из меньшего количества, минимизированных файлов js, измененного HTML, файлов журналов и т. д. на лету без подсказок о сохранении. Инструмент должен уметь читать, сохранять и удалять файлы и папки. У Air также есть приятные функции, с помощью которых вы можете связать расширения файлов с приложением. - person arpo; 13.10.2012