【问题标题】:How can I detect shutdown of a cached iPhone app?如何检测缓存的 iPhone 应用程序的关闭?
【发布时间】:2011-06-15 09:58:38
【问题描述】:

我有一个 iPhone 网络应用程序,它使用缓存清单离线工作并将网络应用程序添加到我的主屏幕。我想找到一种方法来检测应用程序正在退出,这样我就可以做一些家务并保存一些数据。

如果我在 Safari 中作为网页运行,window.onunload 会为我执行此操作,但从主屏幕运行时不会发生此事件。

【问题讨论】:

标签: javascript iphone ios onunload


【解决方案1】:

在 iOS3 或多任务不支持的设备/应用程序中,您可以在 applicationDidTerminate 方法中做家务。

在 iOS4 和多任务支持的设备/应用程序中,您可以在 applicationDidEnterBackground 方法中做家务。最好同时实现 applicationDidTerminate 方法,以防 iOS 决定从内存中删除您的应用程序,应用程序将在您的应用程序中调用 applicationDidTerminate。

干杯。

【讨论】:

  • 问题是关于 javascript webapp,而不是原生 Objective-C 应用。
  • “检测到应用程序正在退出” - 误导性短语
【解决方案2】:

我有一个答案。这不是我们所希望的。

http://www.w3.org/TR/DOM-Level-2-Events/events.html卸载的技术定义是:

当 DOM 发生 unload 事件时 实现从 窗户或框架。本次活动有效 用于 BODY 和 FRAMESET 元素。

我还收到了 Apple 一些知情人士的回复:“很遗憾,我无法找到在单击 Home 按钮时触发的事件!我认为最合适的事件可能是 pagehide事件。当您切换到“选项卡”视图以打开新页面时,此事件实际上会在 iOS 上的 Safari 中触发,但在您单击主屏幕图标时不会触发:-("

【讨论】:

    【解决方案3】:

    我使用下面的代码测试了 pagehide 事件,发现它可以很好地检测用户是导航到另一个链接还是只是在 safari 中打开了一个新标签。

    但是,如果您在保存到主屏幕的网络应用程序中(如您所描述的那样),则 pagehide 事件对于判断网络应用程序是否已关闭是无用的。

    根据您的具体需要,您可以通过将数据保存到 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2019-03-27
      相关资源
      最近更新 更多