在Chrome打包应用中无需提示保存

4
我已经开始研究谷歌在Chrome中打包的应用程序,链接为http://developer.chrome.com/apps,这似乎是一项很棒的技术,但处于早期阶段。我的问题是:是否可能通过应用程序中的fileSystem API将文件保存到计算机而无需提示?我想制作一个可以保存日志文件等的应用程序。
3个回答

3
我曾与涉及打包应用程序开发的人进行了一些交谈,目前在应用程序沙盒之外或没有提示的情况下无法访问文件系统。但是这可能会在未来实现。
但有一个名为Node-Webkit的新项目,类似于Chrome打包应用程序,您可以在Chrome中使用HTML、js等开发应用程序,在浏览器中运行nodejs。使用此工具,您可以访问文件系统和许多其他功能。
在此处查看: https://github.com/rogerwang/node-webkithttps://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);
});

2

-1

有点类似。您可以保存到应用程序的“工作区”,这意味着文件将被保存,但用户或其他应用程序将无法访问它。它将位于沙盒存储区域中。要执行此操作,只需使用HTML5文件系统API(此处的教程)。

您需要在清单中添加"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 工具(资源 -> 文件系统)检查应用程序的文件系统。从那里,您可以下载或删除文件。在 Chrome 24 中,您需要在 chrome://flags 中启用“开发者工具实验”,单击 DevTools 设置菜单、实验和启用 FileSystem 检查。
另一方面,如果您想要保存到应用沙盒之外的任意位置,则出于安全原因需要提示用户。

谢谢,我会看一下的。你确定它能在打包应用中运行吗? - arpo
是的,需要在您的清单中添加"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); - mangini
(抱歉评论中格式不好,请在答案中添加) - mangini
感谢@mangini!我一直在研究这个问题,但不幸的是这不是我想要的,但对于以后的时间来说很有用。看起来Adobe Air现在是我要走的路。不幸的是,由于Air在Adobe的眼中似乎有点过时了。如果能使用Chrome就太棒了。 - arpo
@arpo,如果您更好地描述您的用例,我可以看看是否有其他解决方案,或者在最后一种情况下,将其放入“目前无法实现但用户已经请求”的列表中,以供平台未来发展之用。 - mangini
当然,@mangini,我正要为我的Web开发团队创建一个工具,以便我们可以构建Web项目。我希望能够在不保存提示的情况下即时生成来自less的css、压缩的js文件、修改后的HTML和日志文件等内容。该工具必须能够读取、保存和删除文件和文件夹。Air还具有很好的功能,可以将文件扩展名与应用程序关联起来。 - arpo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接