列出chrome打包应用中的目录内容

时间:2014-03-03 08:02:45

标签: javascript google-chrome-app html5-filesystem

我正在尝试在启动时读取目录的内容。文件夹configmanifest.json处于同一级别。 我尝试过以下代码:

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem; 
window.directoryEntry = window.directoryEntry || window.webkitDirectoryEntry;
function onInitFs(fs) {
    fs.root.getDirectory('config', {}, function(dirEntry){
          var dirReader = dirEntry.createReader();
          dirReader.readEntries(function(entries) {
            for(var i = 0; i < entries.length; i++) {
              var entry = entries[i];
              if (entry.isDirectory){
                console.log('Directory: ' + entry.fullPath);
              }
              else if (entry.isFile){
                console.log('File: ' + entry.fullPath);
              }
            }

          }, errorHandler);
        }, errorHandler);
    };

    window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);

但永远不会调用getDirectory的回调。 我的manifest.json {"fileSystem": ["write", "directory"]}permissions

2 个答案:

答案 0 :(得分:4)

首先,你的manifest.json可能与此无关。 fileSystem权限适用于chrome.fileSystem API,而不是您正在使用的HTML文件API。我认为您的清单中不需要任何特殊权限来使用这些功能。

其次,如果从未调用过getDirectory的成功回调,那么你的错误处理程序应该是。它被称为?如果是这样,用什么参数?

我在Chrome Canary(Chrome 35)中尝试过此代码,它运行正常,只需更改一次:我必须先创建目录。没有像

这样的电话
fs.root.getDirectory("config", {create: true}, function(newDirEntry) {
    console.log(newDirEntry);
}, makeErrorHandler("createDir"));

首先,我从您的getDirectory调用中收到NotFoundError错误。

这可能是因为您尝试使用TEMPORARY文件系统而不是PERSISTENT文件系统。如果你想在启动时出现一个目录,那么你应该要求它是持久的。

或者,将密钥create: true添加到getDirectory选项,并处理目录不存在但已创建的情况。

答案 1 :(得分:0)

@supercalifragilistichespirali - 包目录是出于安全原因而读取的,您无法在那里进行任何更改。如果要存储数据,则应使用沙盒文件系统,Ian在本回答中对此进行了描述。