2014-03-03 2 views
1

시작시 디렉토리의 내용을 읽으려고합니다. config 폴더는 manifest.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입니다.

답변

4

먼저, manifest.json은 아마도 여기에 관련이 없습니다. fileSystem 권한은 사용중인 HTML 파일 API가 아닌 chrome.fileSystem API입니다. 이러한 기능을 사용하기 위해 매니페스트에 특별한 사용 권한이 필요하다고 생각하지 않습니다.

둘째, getDirectory의 성공 콜백이 호출되지 않는 경우 오류 처리기가 있어야합니다. 그것은 부름을 받았습니까? 그렇다면 어떤 주장을하고 있습니까?

Chrome Canary (Chrome 35)에서이 코드를 사용해 보았지만 제대로 작동하지만 한 가지 변경 사항이 있습니다. 먼저 디렉토리를 만들어야합니다.

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

처음처럼 호출하지 않고, 당신의 getDirectory 전화에서 NotFoundError 오류가 발생합니다.

PERSISTENT 파일 시스템 대신 TEMPORARY 파일 시스템을 사용하려고하기 때문에이 문제가 발생할 수 있습니다. 시작할 때 디렉토리가 존재하게하려면 디렉토리를 영구적으로 요청해야합니다.

또는 create: true 키를 getDirectory 옵션에 추가하고 디렉토리가 존재하지 않지만 생성 된 경우를 처리하십시오.

+3

chrome.runtime.getPackageDirectoryEntry (http://developer.chrome.com/extensions/runtime#method-getPackageDirectoryEntry)를 통해 패키지 디렉토리에있는 항목에 액세스 할 수 있습니다. –

+0

@BenWells 감사합니다. 비슷한 시나리오에서'chooseEntry' 호출을 통해 파일 선택기를 사용자에게 표시하지 않고 패키지 디렉토리의 파일에 쓰는 방법이 있습니까? – supercalifragilistichespirali

0

@supercalifragilistichespirali - 보안상의 이유로 패키지 디렉토리가 읽기 전용이므로 여기서 변경할 수 없습니다. 데이터를 저장하려면 샌드 박스 파일 시스템을 사용해야합니다. Ian은이 대답에서 설명했습니다.

관련 문제