2011-01-25 3 views
0

캐시 매니페스트를 사용하여 오프라인으로 작업하고 webapp을 홈 화면에 추가하는 iPhone 웹 앱이 있습니다. 내가 찾고자하는 것은 애플 리케이션이 종료되고 있음을 감지하여 하우스 키핑을하고 데이터를 저장할 수있는 방법이다.캐시 된 iPhone 앱의 종료를 어떻게 검색합니까?

Safari에서 웹 페이지로 실행중인 경우 window.onunload가이 작업을 수행하지만 홈 화면에서 실행할 때이 이벤트가 발생하지 않습니다.

+0

가능한 중복 : http://stackoverflow.com/questions/4520143 http://stackoverflow.com/questions/4401764 – user123444555621

답변

0

답변이 있습니다. 우리가 바라는 것이 아닙니다.

http://www.w3.org/TR/DOM-Level-2-Events/events.html로부터 언로드의 기술적 정의는 다음 DOM 구현 윈도우 또는 프레임에서 문서를 제거 할 때

unload 이벤트가 발생한다. 이 이벤트는 BODY 및 FRAMESET 요소에 대해 입니다.

또한 애플 아는 일부에서 회신을 받았는데 : "불행하게도, 나는 홈 버튼을 클릭했을 때 화재가 난이 힘에 가장 적합한 이벤트를 생각하는 이벤트를 찾을 수 없어! 이 이벤트는 새 페이지를 열 때 "탭"보기로 전환 할 때 iOS의 Safari에서 실제로 실행되지만 홈 화면 아이콘을 클릭하면 실제로는 실행되지 않습니다 .-("

-2

iOS3 또는 지원되지 않는 멀티 태스킹 장치/app에서 applicationDidTerminate 메소드로 하우스 키핑을 수행 할 수 있습니다.

iOS4 및 지원되는 멀티 태스킹 장치/app에서 applicationDidEnterBackground 메서드로 하우스 키핑을 수행 할 수 있습니다. iOS가 메모리에서 앱을 제거하기로 결정한 경우 applicationDidTerminate가 앱에서 호출되기 때문에 applicationDidTerminate 메소드를 구현하는 것이 가장 좋습니다.

건배.

+0

질문에 대한 자바 스크립트 웹 애플리케이션이 아닌 기본 목표 - C 응용 프로그램입니다. –

+0

질문보기. –

+0

"앱이 종료되었음을 감지합니다"- 오해의 소지가있는 문구 – Seyther

1

나는 페이지 뷰 이벤트를 검색하여 사파리를 방문 할 때 사용자가 다른 링크로 이동했는지 또는 새 탭을 열 었는지 감지하는 데 적합하다는 것을 알았습니다.

그러나 귀하의 홈 화면에 저장 한 웹 응용 프로그램 (귀하가 묘사 한 것처럼)이 페이지 숨김 이벤트는 웹 응용 프로그램이 종료되었는지 여부를 알려주지 못합니다.

특별히 필요한 항목에 따라 데이터를 localStorage에 저장 한 다음 앱이 다시 열릴 때 localStorage를 확인하여이 제한을 해결할 수 있습니다. 그런 다음 앱을 완전히 다시 시작하기 전에 수행해야하는 추가 작업을 수행 할 수 있습니다.

function myLoadHandler(evt) 
{ 
    if (evt.persisted) { 
    alert('user returns to page from another tab'); 
    return; 
    } 
    alert('loading new page'); 
} 

function myUnloadHandler(evt) 
{ 
    if (evt.persisted) { 
    alert('user goes to new tab'); 
    return; 
    } 
    alert('user truly leaves the page'); 
} 

if ("onpagehide" in window) { 
    window.addEventListener("pageshow", myLoadHandler, false); 
    window.addEventListener("pagehide", myUnloadHandler, false); 
} else { 
    window.addEventListener("load", myLoadHandler, false); 
    window.addEventListener("unload", myUnloadHandler, false); 
}