2012-11-05 3 views
1

가 나는 자바 스크립트, 과 시작에 모든 것을 시작하기 때문에, 그래서 난,HTML5 파일 시스템 초기화

내 첫 시도는 성공, 클라이언트 측에 데이터를 저장할 수 HTML5 파일 시스템을 사용하여 간단한 프로젝트를 시도하고 onclick 또는 onkeypress 이벤트에서 파일을 조작하고 (파일을 읽고이를 텍스트 영역 또는 P에 추가하고 파일을 쓰거나 수정합니다)

그러나 동시에 이벤트 외부에서 수행 할 때 파일 시스템이 null/undefined이고 프로세스를 계속할 수 없습니다.

여기에서 잘 작동 코드이다

function initFS() { 
     window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024, 
     function(grantedBytes) { 
      window.requestFileSystem(window.TEMPORARY, grantedBytes, function (filesystem) 
      { 
       fs = filesystem; 
      }, errorHandler); 
     }); 
} 
document.body.onclick=function() 
{ 
    alert(fs); 
    fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) { 
    }, errorHandler); 
} 

경보 (FS)는 DOM 파일 시스템의 결과는 그 FS는 변수가 파일 시스템을 의미한다.

하지만이 수행 할 때

function initFS() 
{ 
     window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024,function(grantedBytes){ 
    window.requestFileSystem(window.TEMPORARY, grantedBytes, function(filesystem) { 
     fs = filesystem; 
     }, errorHandler); 
    }) 

} 


if (window.requestFileSystem) { 
    initFS(); 
} 
alert(fs); 

경고 (FS)이 null을 반환 이에 할 수있는 솔루션이 있습니까? , 내 최후의 수단은 확실히 파일 시스템이 될 FS를 클릭 한 후 수 있도록 버튼을 추가 할만한 설명은 이것에 대한 유용한 것,하지만 난

답변

1

그것은 requestQuotarequestFileSystem 함수는 비동기 아마 때문입니다 그 방법을 피하려고 . 즉 alert()으로 실행되고 fs가 설정됩니다.

그럼 .. requestFileSystem 콜백에 모든 코드를 넣을 수 있습니까? 당신은 당신이 할 수있는 예를 들어

달성하기 위해 무엇을하려고하는 I가 불분명 해요 :

function initFS(callback) 
{ 
    window.webkitStorageInfo.requestQuota(PERSISTENT,5*1024*1024,function(grantedBytes){ 
     window.requestFileSystem(window.TEMPORARY, grantedBytes, function(filesystem) { 
      callback(filesystem) 
     }, errorHandler); 
    }) 

} 


if (window.requestFileSystem) { 
    initFS(function (fs) { 
     alert(fs) 
    }); 
} 
+0

그리고 FS가 null의 이유 메이크업 감각, 기적이 작업을 수행하는 방법은 무엇입니까? 왜냐하면 콜백 내에 모든 코드를 넣으려는 것이 실제로하고 싶은 일이 아니기 때문입니다. –

+0

나는 동기식 함수를 모른다. 당신은'약속들'을 볼 수 있습니다 - 당신은 외부 도서관을 가져야 할 것입니다. 또는 fs == null과 같은 추악한 것을 할 수 있습니다. 그런 다음 10ms'(의사 코드)로 다시 시도하십시오. – paulslater19

+0

또는 실행 된 것을 알기 전까지는 코드를 시작하지 않는 것 (예 : 1 초 대기 중) – paulslater19