Javascript 如何在没有提示的情况下在Google Chrome应用程序中写入文件?
我在Chromebook上摸索着免费的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上的示例一样,它是有
文件系统
读取和写入.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个空格开头),很清楚你的问题是什么。我很快会回答。顺便说一下,你的问题不再包含问题,只包含代码。请正确编辑它-我有一个答案,当你这样做。谢谢你的编辑很多!我从这个问题中删去了一点多余的内容,投了赞成票并回答了问题。非常感谢!你让我免于大量测试含糊不清的建议、阅读无关的教程和不完整的文档。