2014-03-03 31 views
1

我试图在启动时读取目录的内容。文件夹configmanifest.json处于同一级别。 我试过下面的代码:在Chrome打包应用程序中列出目录内容

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

回答

4

首先,您的manifest.json在这里可能是无关紧要的。 fileSystem权限用于chrome.fileSystem API,而不是您正在使用的HTML File 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选项,并处理目录不存在但已创建的情况。

+3

另请注意,您可以通过chrome.runtime.getPackageDirectoryEntry(http://developer.chrome.com/extensions/runtime#method-getPackageDirectoryEntry)访问软件包目录中的内容。 –

+0

@BenWells谢谢你。在类似的情况下,是否可以通过'chooseEntry'调用向包中的文件写入文件,而不向用户显示文件选择器? – supercalifragilistichespirali

0

@supercalifragilistichespirali - 软件包目录是只读的,出于安全原因,您不能在那里做任何更改。如果你想存储数据,你应该使用沙箱文件系统,这是Ian在这个答案中描述的。

相关问题