2011-01-25 51 views
0

我有一個iPhone Web應用程序,它使用緩存清單離線工作,並將Web應用程序添加到我的主屏幕。我想找到的是一種檢測應用程序正在退出的方式,以便我可以做一些家務管理並保存一些數據。如何檢測緩存的iPhone應用程序的關閉?

如果我在Safari中作爲網頁運行,window.onunload爲我執行此操作,但從主屏幕運行時不會發生此事件。

+0

可能的重複:http://stackoverflow.com/questions/4520143 http://stackoverflow.com/questions/4401764 – user123444555621 2011-01-25 22:35:02

回答

0

我有一個答案。這不是我們所希望的。

卸載的從http://www.w3.org/TR/DOM-Level-2-Events/events.html技術定義是:當DOM 執行從 一個窗口或框架移除一個文件發生

卸載事件。此事件適用於BODY和FRAMESET元素的 。

我也得到了一些在知道蘋果的答覆:「不幸的是,我一直沒能找到火災被點擊Home鍵的時候,我認爲最合適的情況下這個任務的一個事件!當你切換到「標籤」視圖打開一個新頁面,但不是當你點擊主屏幕圖標時,這個事件實際上在iOS上的Safari中觸發:-(「

-2

在iOS3或多任務不支持的設備/應用程序中,您可以使用applicationDidTerminate方法進行管理。

在iOS4和多任務支持的設備/應用程序中,您可以在applicationDidEnterBackground方法中執行管家操作。最好實施applicationDidTerminate方法,以防萬一iOS決定從應用程序中移除你的應用程序,applicationDidTerminate將在你的應用程序中被調用。

乾杯。

+0

的問題是關於一個JavaScript Web應用程序,而不是原生Objective-C的應用程序。 – 2011-01-26 01:34:07

1

我測試了頁面隱藏事件使用下面的代碼,並發現它適用於檢測用戶是否導航到另一個鏈接,或者只是在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); 
} 
相關問題