해결책을 찾은 것 같습니다. 그것은 아마도 다른 사람들에게도 도움이 될 것입니다.
로더를 XMLHttpRequest를 사용하여 필요한 모든 파일을 가져 와서 localStorage (로더)에 저장하고 localStorage에서 파일을 읽기 만하면 문서에 기록하는 두 개의 HTML 파일로 나눕니다. booter)와 적절한 래퍼 (예 :). 부트 프로그램에는 응용 프로그램 캐시에 보관할 매니페스트 파일이 있습니다. 로더는 그렇지 않습니다. 사용자는 먼저 부트 프로그램을 호출합니다. 만약 booter가 이미 localStorage에있는 파일을 찾으면 그것은 그 일을합니다. 그렇지 않으면 location.replace()를 사용하여 로더를 호출합니다. 로더는 XMLHttpRequest를 사용하여 서버에서 파일을로드하고 localStorage에 배치 한 다음 location.replace()를 사용하여 부트 프로그램을 다시 호출합니다. 이 네트워크 오류가 발생하지 않는 것 같습니다.
오프라인으로 실행하려면 사용자가 iPhone Safari 브라우저 (부트 프로그램을 다시 실행하는 로더를 호출 함)에서 부트 프로그램을 호출하여 웹 애플리케이션을 부팅해야합니다. Safari에서 사용자는 웹 애플리케이션 (부트 링크)을 홈 화면에 추가해야합니다 (하단의 "+"버튼 사용). 오프라인 일 때 사용자는 홈 화면 아이콘에서 앱으로 이동할 수 있습니다. 다시 렌더링하려면 몇 초가 걸리지 만 이후에는 완전히 기능합니다. 온라인 때와 같은 지연입니다. iPhone Safari 브라우저에서 링크를 호출하면 온라인으로 작동하지만 오프라인에서는 작동하지 않습니다.
부트러는 응용 프로그램 캐시의 "updateready"이벤트를 모니터링하여 온라인 및 iPhone이 부트 프로그램의 매니페스트 파일에서 변경 사항을 감지하고 새 부트 프로그램을 다운로드하면 새 캐시 (window.applicationCache.swapCache()) location.replace()를 사용하여 로더를 다시 호출합니다. 나는 또한 펑키가 진행되고 있음을 사용자에게 알려주는 경고()를 추가한다. 따라서 매니페스트 파일을 변경하면 클라이언트가 온라인 일 때 새로운 파일을 가져 오게됩니다.
흥미롭게도 Safari에서 설정 한 localStorage는 쿠키가 전송 되더라도 홈 화면 아이콘을 호출하여 제공된 동일한 페이지에서 사용할 수 없다는 것을 알았습니다! 따라서 아이콘에서 부트 프로그램이 처음 실행될 때 이전에 Safari에로드 되었더라도 파일을 다시로드합니다. 또한 나머지 파일이 업데이트되었을 때 서버에서 다시로드하지 않아 로더가 캐싱되지 않도록 명시 적으로 방지해야했습니다.