Save without prompt in a Chrome Packaged App

前端 未结 3 1571
醉梦人生
醉梦人生 2021-01-19 10:23

I have started to look in to Googles Packaged Apps in Chrome, http://developer.chrome.com/apps which seems to be a great technology, but in an early stage.

My quest

相关标签:
3条回答
  • 2021-01-19 10:37

    I had some conversations with people involved in the packaged apps development and as it is today you cant have access to the file system without prompt our outside of an apps sandbox. But it might come in the future.

    But there is a new project called Node-Webkit that is very similar to Chrome packaged apps where you develop your app in Chrome with HTML, js etc where you also can run nodejs in the browser. Using this you can access the file system and many more things.

    Check it out here: https://github.com/rogerwang/node-webkit and https://github.com/rogerwang/node-webkit/wiki

    Loading and saving files in Node-Webkit is very easy. It looks like this

    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);
    });
    
    0 讨论(0)
  • 2021-01-19 10:42

    It looks like you will soon be able to do this -- see https://groups.google.com/a/chromium.org/forum/#!topic/apps-dev/fu1TyjdYLEc

    0 讨论(0)
  • 2021-01-19 11:01

    Kind of. You can save to your app's "workspace", which means the file will be saved, but the user or other apps won't have access to it. It will be in a sandboxed storage area. To do it, just use the HTML5 Filesystem API (tutorial here).

    You need: "permissions": ["storage"] in your manifest, and in your js you can do:

    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);
    

    You can also inspect your app's filesystem with Inspector Tools (Resources -> Filesystem). From there, you can either download or delete files. In Chrome 24, you need to Enable Developer Tools experiments in chrome://flags, click on the DevTools settings menu, Experiments, and enable the FileSystem inspection.

    On the other hand, if you want to save in an arbitrary location outside of your app's sandbox, the user prompt is required for security reasons.

    0 讨论(0)
提交回复
热议问题