Javascript 如何在没有提示的情况下在Google Chrome应用程序中写入文件?

Javascript 如何在没有提示的情况下在Google Chrome应用程序中写入文件?,javascript,file-io,google-chrome-app,chromebook,chrome-dev-editor,Javascript,File Io,Google Chrome App,Chromebook,Chrome Dev Editor,我在Chromebook上摸索着免费的Chrome开发编辑器。我正在尝试使用文件系统读取和写入.txt文件。这一切都是非常封闭的,一点也不像在C。我不能再告诉我,如果我甚至被允许做一些事情,更不用说在适当的地方是找到如何做 我认为我可以使用文件thingy看到的文件在沙盒中,我可以在沙盒中播放(也就是说,应用程序可以访问的文件夹?),根目录称为下载。果不其然,如果我使用所有的点调用和回调参数进行读取,就像developer.chrome.com/apps/filesystem上的示例一样,它是有

我在Chromebook上摸索着免费的Chrome开发编辑器。我正在尝试使用
文件系统
读取和写入.txt文件。这一切都是非常封闭的,一点也不像在C。我不能再告诉我,如果我甚至被允许做一些事情,更不用说在适当的地方是找到如何做

我认为我可以使用文件thingy看到的文件在沙盒中,我可以在沙盒中播放(也就是说,应用程序可以访问的文件夹?),根目录称为下载。果不其然,如果我使用所有的点调用和回调参数进行读取,就像developer.chrome.com/apps/filesystem上的示例一样,它是有效的。但我必须有一个提示 每次读取和写入都是如此

谷歌又想出了一个小把戏:(我想它实际上是在stackoverflow中)一个
chrome.runtime
调用,
getPackagedDirectoryEntry
,它似乎给了我一个应用程序文件夹的句柄。伟大的这就是我不需要经过提示的全部内容。对于readfile,无论如何

但是,尝试对writefile应用相同的技巧并没有奏效。事实上,它什么也没做。没有错误,没有抱怨。没有什么。即使带有提示的写入文件可以正常工作(因此我大概拥有权限和Blob构造权限。)怎么办

这是我的密码:

function test(){
// Samsung 303C Chromebook - Chrome Dev Editor - /Downloads/Daily/main.js

// prompted write

  chrome.fileSystem.chooseEntry({type:'saveFile'},function(a){
    a.createWriter(function(b){
      b.write(new Blob(["Programming fun"],{type:'text/plain'}));
    },function(e){trace.innerText = 'error is ' + e;});
  });

// unprompted read

  chrome.runtime.getPackageDirectoryEntry(function(a){
    a.getFile('text.txt',{},function(b){
      b.file(function(c){
        var d = new FileReader();
        d.onloadend = function(){trace.innerText = this.result;};
        d.readAsText(c);
      });
    });
  });

// unprompted write - why not?

  chrome.runtime.getPackageDirectoryEntry(function(a){
    a.getFile('new.txt',{create:true},function(b){
      b.createWriter(function(c){
        c.write(new Blob(["Miss Manners fan"],{type:'text/plain'}));
      },function(e){trace.innerText = 'error is ' + e;});
    });
  });
}    
你可以使用基本的网络。首先,添加。然后,将打包的文件复制到沙盒文件系统,如下所示:

chrome.runtime.getPackageDirectoryEntry(function(package) {
  package.getMetadata(function(metadata) {
    webkitRequestFileSystem(PERSISTENT, metadata.size, function(filesystem) {
      package.copyTo(filesystem.root)
    })
  })
})

平心而论,文件系统API是一大堆回调,沉溺其中并不是不合理的

它是,但是
chrome.runtime.getPackageDirectoryEntry
返回一个只读的
DirectoryEntry
,并且无法使其可写(它是)

您可能看不到错误,因为它在
getFile
阶段失败,您没有错误处理程序

不幸的是,对于Chrome应用程序来说,写入真实文件系统的唯一选项是提示用户。然而,你只能问一次


如果您不需要向真正的文件系统进行写操作,而只需要内部存储,则可以帮助您(是的,它被标记为已放弃,但Chrome会维护它,因为
Chrome.filesystem
是建立在它之上的)

扩展还可以访问chrome.downloadsAPI,该API允许写入(但不读取)下载文件夹



另外,你在文件应用程序中看到的是你在ChromeOS+挂载的云文件系统(例如Google Drive)中的“真实”本地文件系统

不清楚“示例代码”和“不工作”是什么意思。是的,对于示例代码(尽管请正确格式化-所有行必须以4个空格开头),很清楚你的问题是什么。我很快会回答。顺便说一下,你的问题不再包含问题,只包含代码。请正确编辑它-我有一个答案,当你这样做。谢谢你的编辑很多!我从这个问题中删去了一点多余的内容,投了赞成票并回答了问题。非常感谢!你让我免于大量测试含糊不清的建议、阅读无关的教程和不完整的文档。