我有一個iPhone Web應用程序,它使用緩存清單離線工作,並將Web應用程序添加到我的主屏幕。我想找到的是一種檢測應用程序正在退出的方式,以便我可以做一些家務管理並保存一些數據。如何檢測緩存的iPhone應用程序的關閉?
如果我在Safari中作爲網頁運行,window.onunload爲我執行此操作,但從主屏幕運行時不會發生此事件。
我有一個iPhone Web應用程序,它使用緩存清單離線工作,並將Web應用程序添加到我的主屏幕。我想找到的是一種檢測應用程序正在退出的方式,以便我可以做一些家務管理並保存一些數據。如何檢測緩存的iPhone應用程序的關閉?
如果我在Safari中作爲網頁運行,window.onunload爲我執行此操作,但從主屏幕運行時不會發生此事件。
我有一個答案。這不是我們所希望的。
卸載的從http://www.w3.org/TR/DOM-Level-2-Events/events.html技術定義是:當DOM 執行從 一個窗口或框架移除一個文件發生
卸載事件。此事件適用於BODY和FRAMESET元素的 。
我也得到了一些在知道蘋果的答覆:「不幸的是,我一直沒能找到火災被點擊Home鍵的時候,我認爲最合適的情況下這個任務的一個事件!當你切換到「標籤」視圖打開一個新頁面,但不是當你點擊主屏幕圖標時,這個事件實際上在iOS上的Safari中觸發:-(「
在iOS3或多任務不支持的設備/應用程序中,您可以使用applicationDidTerminate方法進行管理。
在iOS4和多任務支持的設備/應用程序中,您可以在applicationDidEnterBackground方法中執行管家操作。最好實施applicationDidTerminate方法,以防萬一iOS決定從應用程序中移除你的應用程序,applicationDidTerminate將在你的應用程序中被調用。
乾杯。
的問題是關於一個JavaScript Web應用程序,而不是原生Objective-C的應用程序。 – 2011-01-26 01:34:07
我測試了頁面隱藏事件使用下面的代碼,並發現它適用於檢測用戶是否導航到另一個鏈接,或者只是在Safari瀏覽器中打開新標籤。
但是,如果您處於一個保存到主屏幕的網絡應用程序(就像你描述的那樣),那麼頁面隱藏事件對於告訴網絡應用程序是否關閉是無用的。
根據具體需要,您可以通過將數據保存到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);
}
可能的重複:http://stackoverflow.com/questions/4520143 http://stackoverflow.com/questions/4401764 – user123444555621 2011-01-25 22:35:02