2010-11-20 4 views
5

휴대 기기에서 오프라인으로 실행하는 기본 비밀번호 관리자 유형 웹 애플리케이션을 작성했습니다 (4 세대 iPod 터치에서 테스트). 나는 홈 화면에 응용 프로그램을 추가했으며 iPod이 온라인 상태이고 서버에 연결할 수있는 동안 모두 제대로 작동합니다. 내가 아이팟 오프라인을 넣어 일단 내가 응용 프로그램을 열 때, 다음과 같은 대화 상자가 온다 :iPod에서 오프라인으로 작업 할 웹 앱을 얻을 수 없습니다.

수가 인터넷

에 연결되어 있지 않기 때문에 PwdThing를 열 수 없습니다

여부 공개 PwdThing 응용 프로그램 (passwordthing.html)에 대한 단일 정적 HTML 파일은 매니페스트 파일을 가리키는 :

<html manifest="cache.manifest"> 
... 

파일에 text/cache-manifest로 제공 될하도록 설정되어

CACHE MANIFEST 
passwordthing.html 
passwordthing.js 
... 

그리고 cache.manifest 파일 :파일합니다 (jQuery Mobile 파일 포함) 응용 프로그램에서 사용하는 모든 파일이 포함

AddType text/cache-manifest .manifest 

을 모든 소스 파일은 Github에 있으며 (작성시에는 this commit이 버전 임) 나는 이것을 설치하기 위해 public server을 설치했다.

내 앱을 오프라인으로 작동시킬 수없는 이유는 무엇입니까?

+2

캐싱 오류가 발생하는지 확인하려면 앱에서 크롬을 지정해야합니다. – hvgotcodes

+0

@hvgotcodes 캐싱 오류 (파일 이름이 잘못되었습니다.)가 발견되었습니다. 귀하의 의견에 따라 새로운 답변을 추가 할 수 있다면 받아 들일 것입니다 :-) –

+0

완료 - 모든 릴리스에서 항상 매니페스트 이름을 변경하고 싶을 수도 있습니다. 그렇지 않으면 파일이 변경 될 수 있지만 이름은 동일하게 유지되며 업데이트되지 않습니다. – hvgotcodes

답변

2

제가 생각할 수있는 유일한 점은 파일을 변경하지 않았으며 모바일 Safari가 이전 버전의 매니페스트를 캐시했기 때문입니다. 매니페스트에 댓글을 달아주세요. 매니페스트 파일 자체의 이름을 변경하려고 할 수도 있습니다. 내 IPad 캐싱을 얻으려면 그렇게해야만했다. 애플리케이션을 업데이트 할 때마다 매니페스트의 이름을 변경하여 날짜를 포함시킨다.

iOS4.2의 매니페스트 지원이 훨씬 뛰어납니다. 외출 할 때 상황이 개선되는 것을 볼 수 있습니다.

편집 - 또는 그 파일 이름이 잘못되었습니다. ;) (문제의 주석 참조). 고통으로

내가 찾은 디버깅 HTML5의 오프라인 애플 리케이션 :

+0

감사합니다. 매니페스트 파일명을 변경해 보았지만 차이는 없었습니다. ( –

+0

@ben 크롬에서 앱을로드하고 콘솔을 보았습니까? – hvgotcodes

1

은 []는 여기에 적용 할 수 있기 때문에 [아래 my answer from here을 복제]. 이 기사의 코드가 내 앱 잘못 알아낼 도움이 발견 :

http://jonathanstark.com/blog/2009/09/27/debugging-html-5-offline-application-cache/ 조나단 스타크에 의해

디버깅 HTML 5 오프라인 응용 프로그램 캐시

오프라인을 제공하기 위해 찾고 있다면 HTML5에서 사용할 수있는 오프라인 응용 프로그램 캐시는 킬러입니다. 그러나, 그것은 거대한 PITA 디버그, 특히 당신이 여전히 주위에 머리를하려고하는 경우.

캐시 매니페스트에 어려움이있는 경우 기본 HTML 페이지에 다음 JavaScript를 추가하고 Firefox에서 Firebug를 사용하거나 Safari에서 디버그> 오류 콘솔 표시를 사용하여 콘솔에서 출력을 봅니다.

질문이 있으시면 주석에 PLMK를 입력하십시오.

HTH,

var cacheStatusValues = []; 
cacheStatusValues[0] = 'uncached'; 
cacheStatusValues[1] = 'idle'; 
cacheStatusValues[2] = 'checking'; 
cacheStatusValues[3] = 'downloading'; 
cacheStatusValues[4] = 'updateready'; 
cacheStatusValues[5] = 'obsolete'; 

var cache = window.applicationCache; 
cache.addEventListener('cached', logEvent, false); 
cache.addEventListener('checking', logEvent, false); 
cache.addEventListener('downloading', logEvent, false); 
cache.addEventListener('error', logEvent, false); 
cache.addEventListener('noupdate', logEvent, false); 
cache.addEventListener('obsolete', logEvent, false); 
cache.addEventListener('progress', logEvent, false); 
cache.addEventListener('updateready', logEvent, false); 

function logEvent(e) { 
    var online, status, type, message; 
    online = (navigator.onLine) ? 'yes' : 'no'; 
    status = cacheStatusValues[cache.status]; 
    type = e.type; 
    message = 'online: ' + online; 
    message+= ', event: ' + type; 
    message+= ', status: ' + status; 
    if (type == 'error' && navigator.onLine) { 
     message+= ' (prolly a syntax error in manifest)'; 
    } 
    console.log(message); 
} 

window.applicationCache.addEventListener(
    'updateready', 
    function(){ 
     window.applicationCache.swapCache(); 
     console.log('swap cache has been called'); 
    }, 
    false 
); 

setInterval(function(){cache.update()}, 10000); 
0

또한
J, HTML 파일에 일치하는 것을 cache.manifest이 (내 경우 UTF-8) 정확한 BOM을 가지고 있는지 확인하십시오. 콘텐츠 형식이 UTF-8이 아닌 비 BOM ASCII 파일 인 경우 캐싱은 실패합니다.

HTH 누군가 캐싱이 실패합니다.

Christine Boersen

관련 문제